首頁 > 資料庫 > mysql教程 > 如何有效率地查詢MySQL樹結構中的後代和祖先?

如何有效率地查詢MySQL樹結構中的後代和祖先?

DDD
發布: 2025-01-06 18:24:10
原創
417 人瀏覽過

How Can I Efficiently Query Descendants and Ancestors in a MySQL Tree Structure?

MySQL 中的單一查詢樹結構查詢

在SQL 中,樹結構通常儲存在包含ID、資料和列的表中。家長身分證。檢索特定行的所有後代或祖先可能具有挑戰性,特別是考慮到它們潛在的未知深度。

查詢後代

要檢索特定行的所有後代,我們可以使用一種稱為修改預序樹遍歷的技術。如同Joe Celko 在「Smarties 的SQL 中的樹層結構」中所述,此方法涉及建立具有以下結構的遞歸公用表表達式(CTE):

WITH RECURSIVE Descendants AS (
  SELECT id, data, parent_id
  FROM tree_table
  WHERE id = <starting_row_id>
  UNION ALL
  SELECT t.id, t.data, t.parent_id
  FROM Descendants AS T
  JOIN tree_table t ON t.parent_id = T.id
)
SELECT * FROM Descendants;
登入後複製

此CTE 遞歸地標識給定的起始行,然後繼續遍歷層次結構,直到到達葉節點。

查詢祖先

要擷取特定行的所有祖先,我們可以使用類似的方法,稍加修改:

WITH RECURSIVE Ancestors AS (
  SELECT id, data, parent_id
  FROM tree_table
  WHERE id = <starting_row_id>
  UNION ALL
  SELECT t.id, t.data, t.parent_id
  FROM Ancestors AS T
  JOIN tree_table t ON t.id = T.parent_id
)
SELECT * FROM Ancestors;
登入後複製

此CTE遞歸地標識給定起始的所有父行行,然後繼續向上遍歷層次結構,直到到達根節點。

範例實作

這些查詢在PHP 的工作範例可以在以下位置找到:http://www.sitepoint.com/article/hierarchical-data- database/2/

以上是如何有效率地查詢MySQL樹結構中的後代和祖先?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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