我有张桌子

 CREATE TABLE IF NOT EXISTS `Folder` (
    `idFolder` INT(11) NOT NULL AUTO_INCREMENT,
    `FolderName` VARCHAR(150) NOT NULL,
    `idFolderParent` INT(11) NULL,
    PRIMARY KEY (`idFolder`),
    CONSTRAINT `fk_1`
    FOREIGN KEY (`idFolderParent`)
    REFERENCES `Folder` (`idFolder`)
)

我填这张桌子
idFolder , FolderName , idFolderParent
   1           ADoc           Null
   2           ADoc1           1
   3           ADoc2           2
   4           ADoc3           3
   5           ADoc4           4
   6           ADoc5           5
   7           ADoc6           4

选择idfolder=1的文件夹时,应返回此文件夹和子文件夹(2、3、4、5、6、7)的所有子文件夹。
当我选择一个文件夹时,id=4=>(5,7,6)
当我选择一个文件夹id=3时=>(4,5,6,7)
如何在一个查询中做到这一点?
谢谢

最佳答案

这是工作的那个

SELECT GROUP_CONCAT(lv SEPARATOR ',') FROM (
SELECT @pv:=(SELECT GROUP_CONCAT(idFolder SEPARATOR ',') FROM Folder WHERE idFolderParent IN (@pv)) AS lv FROM Folder
JOIN
(SELECT @pv:=1)tmp
WHERE idFolderParent IN (@pv)) a;

请看这里的SQL小提琴:http://sqlfiddle.com/#!2/02b78/1

08-06 19:07