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

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

Susan Sarandon
發布: 2025-01-03 22:28:44
原創
825 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板