MySQL 中嵌套資料夾結構的遞歸查詢
考慮一個場景,其中一個表格儲存分層資料夾結構,其中每個資料夾都有一個ID 、父資料夾ID 和名稱。表格的設計如下:
folders_table ----------------------- id_folder id_folder_parent folder_name
挑戰是使用單一 SELECT 查詢檢索特定目錄的所有子目錄。
解決方案:修改資料庫結構
一種方法涉及修改資料庫結構以方便遞歸查詢。不要透過 id_folder_parent 資料列儲存間接關係,請考慮使用下列結構:
folders_table ----------------------- id_folder folder_path folder_name
在此更新的結構中,folder_path 資料列儲存層次結構中每個資料夾的完整路徑(從根目錄開始)。這允許使用遞歸有效地遍歷資料夾結構。
遞迴查詢
一旦資料庫結構被修改,以下遞迴查詢可用於擷取所有子目錄特定目錄的:
WITH RECURSIVE FolderTraversal AS ( SELECT id_folder, folder_path, folder_name FROM folders_table WHERE id_folder = <directory_id> UNION ALL SELECT t.id_folder, t.folder_path, t.folder_name FROM folders_table AS t JOIN FolderTraversal AS p ON t.folder_path LIKE CONCAT(p.folder_path, '%/') ) SELECT id_folder, folder_path, folder_name FROM FolderTraversal;
在上面在的查詢中,folder_path 欄位是用來定義遞歸。它迭代地將當前資料夾路徑附加到下一個資料夾的路徑,連接樹枝。透過在指定的directory_id開始查詢,它會遞歸遍歷整個子樹。
以上是如何使用遞歸查詢高效檢索MySQL中特定目錄的所有子目錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!