使用遞歸CTE 透過單一查詢尋找MySQL 表中的所有父項
在具有分層結構的資料庫中,辨識父項特定記錄的分析可能是一項複雜的任務。在 MySQL 中,可以使用遞歸公用表表達式 (CTE) 有效地解決這項挑戰。讓我們探討問題陳述及其解決方案。
問題陳述:
給定一個具有分層結構的MySQL 表(例如提供的模式中的表),其中每行代表一個節點,具有ID 、標題、父ID 和其他相關訊息,任務是使用單一節點檢索層次結構中特定節點的所有祖先(父節點)
解決方案:
提供的解決方案利用遞歸 CTE 來遍歷層次結構並識別由其 ID 指定的節點的父節點。以下查詢示範了該方法:
SELECT T2.id, T2.title, T2.controller, T2.method, T2.url FROM ( SELECT @r AS _id, (SELECT @r := parent_id FROM menu WHERE id = _id) AS parent_id, @l := @l + 1 AS lvl FROM (SELECT @r := 31, @l := 0) vars, menu m WHERE @r <> 0) T1 JOIN menu T2 ON T1._id = T2.id ORDER BY T1.lvl DESC;
查詢說明:
此查詢使用單一 SQL 語句有效地擷取指定節點的所有父節點,為在 MySQL 中導覽分層資料提供方便且高效能的解決方案。
以上是如何使用單一查詢找到 MySQL 分層表中節點的所有祖先?的詳細內容。更多資訊請關注PHP中文網其他相關文章!