草庐IT

Mysql select recursive get all child with multiple level

coder 2023-06-11 原文

我有一张 table

 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

when select a folder with idFolder=1, it should be return all child for this folder and subchild folder(2, 3, 4, 5 ,6 ,7)

当我选择文件夹 id = 4 ==> (5,7, 6)

当我选择文件夹 id = 3 ==> (4, 5,6, 7)

如何用一个查询做到这一点?

谢谢

最佳答案

以前的解决方案都不适合我。两者都只有在 parent 以特定顺序保存到数据库中时才有效。

我不得不承认我并不完全理解查询的工作方式,但可以找到适合我的方式(至少比其他答案更好)。

第一个和第二个查询不起作用的数据是:

idFolder , FolderName , idFolderParent
   1           ADoc           Null  
   2           ADoc1           7  
   3           ADoc2           2
   4           ADoc3           3
   5           ADoc4          Null
   6           ADoc5           5
   7           ADoc6           5

如果您使用此数据集中的第一个和第二个查询,对于 id 5,您只会得到结果“6,7”。但是,如果您使用我的查询,您会得到:'6,7,2,3,4',这是预期的结果。

我的版本:

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

希望对大家有帮助。由于缺乏声誉,我无法评论或否决其他答案:(

关于Mysql select recursive get all child with multiple level,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28363893/

有关Mysql select recursive get all child with multiple level的更多相关文章

随机推荐