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