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中文網其他相關文章!