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中文网其他相关文章!