首頁 > 資料庫 > mysql教程 > 如何使用單一查詢來尋找 MySQL 層次結構中特定條目的所有父節點?

如何使用單一查詢來尋找 MySQL 層次結構中特定條目的所有父節點?

Linda Hamilton
發布: 2024-11-30 11:54:18
原創
346 人瀏覽過

How Can I Find All Parent Nodes of a Specific Entry in a MySQL Hierarchy Using a Single Query?

使用單一查詢來尋找MySQL 表中的所有父項(遞歸查詢)

在資料庫管理中,擷取分層資料通常需要涉及遞歸演算法的複雜查詢。當我們需要提取分層表中給定條目的所有父節點(如上面所示)時,就會出現這樣一種情況。

挑戰:

考慮提供的具有選單項目層次結構的表,其中每個節點都有一個 ID、標題和父 ID。我們的目標是使用單一 MySQL 查詢來取得標題為「Categories」的條目的所有父節點。

解決方案:

我們可以使用遞歸查詢來遍歷表並累積每個層級的父節點。以下查詢完成此操作:

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;
登入後複製

解釋:

  • 子查詢初始化兩個使用者變數@r(目前節點的id)和@l(目前節點的層級) ),初始值分別為31(「類別」的id)和0。
  • 外部查詢迭代表,使用目前節點的父 ID 更新 @r 並遞增 @l 以追蹤目前層級。
  • 外部查詢(T1)的結果與基於原始表(T2)的連接在公共列_id上。
  • 最後將結果依lvl降序排序,以分層方式呈現父節點order.

輸出:

執行查詢將產生所需的輸出:

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 層次結構中特定條目的所有父節點?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板