递归查询检索 MySQL 中的所有子文件夹和子子文件夹
问题:
如何我可以设计一个 SQL 查询来检索分层数据库中给定父文件夹 ID 的所有子文件夹吗?
场景:
考虑一个表文件夹以下结构:
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 |
问题陈述:
我们要设计一个查询返回给定父文件夹 ID 的所有子文件夹和子文件夹。例如:
解决方案:
以下查询使用递归技术来实现所需的结果:
<code class="sql">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;</code>
解释:
以上是如何使用单个 SQL 查询检索分层数据库中的所有子文件夹和子文件夹?的详细内容。更多信息请关注PHP中文网其他相关文章!