嵌套文件夹的递归查询
获取具有多层嵌套的所有子文件夹和子子文件夹对 MySQL 查询提出了挑战。虽然有多种方法,但本文将重点关注有效且全面的解决方案。
要从给定父级检索所有后代文件夹,我们可以利用递归查询,它允许在单个语句中进行嵌套计算。此方法涉及一个迭代过程,其中每个文件夹的 ID 用作下一次迭代的参数,每次循环都会扩展搜索深度。
考虑以下场景:给定一个名为 Folder 的数据库表,其中包含列 idFolder (auto -递增主键)、FolderName 和 idFolderParent(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 |
此结构允许我们创建嵌套文件夹层次结构。例如,如果我们查询 ADoc (idFolder=1) 的所有子文件夹,我们期望不仅检索其直接子文件夹(ADoc1、ADoc2),而且还检索它们下面的所有后代文件夹(ADoc3、ADoc4、ADoc5、ADoc6、ADoc7) .
以下 SQL 查询使用递归迭代实现此目的:
<code class="sql">WITH RECURSIVE FolderHierarchy AS ( SELECT idFolder, FolderName, idFolderParent FROM Folder WHERE idFolder = 1 UNION ALL SELECT f.idFolder, f.FolderName, f.idFolderParent FROM FolderHierarchy AS h JOIN Folder AS f ON h.idFolderParent = f.idFolderParent ) SELECT idFolder, FolderName FROM FolderHierarchy;</code>
此查询使用名为FolderHierarchy 的公用表表达式 (CTE),该表达式最初选择根文件夹 (ADoc),然后递归将子文件夹加入层次结构。它会继续此过程,直到不再有子文件夹为止,从而有效地收集所有后代。最终结果提供了 ID 和文件夹名称的嵌套列表,允许检索任意深度级别的所有子文件夹和子子文件夹。
以上是如何使用 MySQL 中的递归查询检索嵌套层次结构中的所有后代文件夹?的详细内容。更多信息请关注PHP中文网其他相关文章!