使用遞歸在 MySQL 表中尋找父級
在資料庫模式中,建立層次關係很常見。查詢此類資料時,不僅需要檢索特定記錄,還需要檢索它們的層次結構連接。本文將解決使用單一查詢在 MySQL 表中尋找記錄的所有父級的任務。
問題陳述
給定一個包含列ID、TITLE 的表、CONTROLLER、METHOD 和PARENT_ID,使用單一SQL 查找TITLE 為「Categories」的記錄的所有父項查詢。
所需輸出
輸出應顯示下列內容欄位:
並且應該取得記錄:
id | title | controller | method | url | parent_id |
---|---|---|---|---|---|
3 | Modules | admin | modules | (NULL) | 0 |
17 | User Modules | modules | user_module | (NULL) | 3 |
31 | Categories | categories | category | (NULL) | 17 |
解決方案
要獲得所需的輸出,我們需要利用MySQL的遞歸查詢功能。這是我們可以使用的SQL 查詢:
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;
讓我們分解這個查詢:
透過執行透過此查詢,我們可以在單一資料庫呼叫中檢索標題為「類別」的記錄的所有父項。
以上是如何使用單一遞歸查詢來尋找 MySQL 表中的所有父記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!