gpt4 book ai didi

Mysql select递归获取具有多个级别的所有子级

转载 作者:行者123 更新时间:2023-11-29 21:46:26 25 4
gpt4 key购买 nike

我有一张 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

当选择 idFolder=1 的文件夹时,应返回该文件夹及其子子文件夹的所有子文件夹(2, 3, 4, 5 ,6 ,7)

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

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

如何通过一个查询来做到这一点?

谢谢

最佳答案

以前的解决方案都不适合我。仅当父项按特定顺序保存到数据库中时,两者才起作用。

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

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

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递归获取具有多个级别的所有子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34070926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com