首頁 >資料庫 >mysql教程 >如何使用遞歸查詢高效檢索MySQL中特定目錄的所有子目錄?

如何使用遞歸查詢高效檢索MySQL中特定目錄的所有子目錄?

Susan Sarandon
Susan Sarandon原創
2025-01-03 22:28:44780瀏覽

How to Efficiently Retrieve All Subdirectories of a Specific Directory in MySQL Using Recursive Queries?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn