巢狀資料夾的遞迴查詢
取得具有多層巢狀的所有子資料夾和子子資料夾對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中文網其他相關文章!