在 MySQL 中递归树结构
在处理分层数据时,通常需要检索树中特定节点的后代结构。在 MySQL 环境中,一个位置可以位于另一个位置内,随着级别数量的增加,任务会变得更加复杂。
提供的 PHP/MySQL 查询:
$sql = "SELECT id FROM se_locations_services WHERE parent_locationid IN ( SELECT location_id FROM se_locations_parent WHERE parent_id = '$locationid' )";
有效检索给定位置的直接后代。
但是,要检索所有后代,无论深度如何,都需要使用递归方法。 MySQL 本身并不支持递归查询,但下面链接的 mysql.com 综合文章中概述了一个优雅的解决方案:
[在 MySQL 中管理分层数据](https://www.mysql.com/news -and-events/mysql-perspectives/performance-tuning-json-mysql-for-hierarchical-data/)
本文介绍了处理分层数据的各种方法,包括使用 CTE(常见表表达式)来实现递归:
WITH RECURSIVE descendants (id, parent_id) AS ( SELECT id, parent_id FROM locations UNION ALL SELECT l.id, l.parent_id FROM locations l JOIN descendants d ON l.parent_id = d.id ) SELECT DISTINCT id FROM descendants WHERE parent_id = $locationid;
通过使用 UNION ALL 运算符,CTE 迭代扩展后代列表,允许 MySQL 从单个查询中检索完整的层次结构。
以上是如何在MySQL中递归遍历树结构?的详细内容。更多信息请关注PHP中文网其他相关文章!