首页 >数据库 >mysql教程 >如何在不指定深度的情况下高效查询 MySQL 树结构中的后代或祖先?

如何在不指定深度的情况下高效查询 MySQL 树结构中的后代或祖先?

Patricia Arquette
Patricia Arquette原创
2025-01-06 17:30:41804浏览

How Can I Efficiently Query Descendants or Ancestors in a MySQL Tree Structure Without Specifying Depth?

MySQL 中的树结构查询:深度无关遍历

在 MySQL 中访问树结构数据通常涉及递归或顺序查询。但是,可以检索树结构表中给定行的所有后代或祖先,而无需使用单个查询显式指定深度级别。这种技术称为修改前序树遍历。

查询方法

在具有 id、data 和parent_id 列的树结构表中,修改后的前序遍历查询可以公式如下:

SELECT id, data, parent_id
FROM tree_table
WHERE id IN (
    SELECT id
    FROM tree_table
    WHERE ancestry LIKE '%given_id/%'
)

这里,given_id 表示该行的 ID您想要检索后代或祖先。

使用和实现

查询字符串 'ancestry LIKE '%given_id/%'' 过滤具有给定 ID 的行作为他们祖先道路的一部分。这可确保返回所有后代(以及给定行)。要检索祖先,只需将 '%given_id/%' 替换为 '%/given_id/%'。

例如,在使用 MySQLi 的 PHP 中:

$stmt = $mysqli->prepare("SELECT id, data, parent_id FROM tree_table WHERE id IN (SELECT id FROM tree_table WHERE ancestry LIKE '%?/%')");

其他信息

Sitepoint 提供的 PHP 示例(在答案中提到)提供了对此的全面说明技术。有关在 SQL 中处理树结构的更多见解,请参阅 Joe Celko 的“Smarties SQL 中的树和层次结构”。

以上是如何在不指定深度的情况下高效查询 MySQL 树结构中的后代或祖先?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn