使用递归 CTE 通过单个查询查找 MySQL 表中的所有父项
在具有分层结构的数据库中,识别父项特定记录的分析可能是一项复杂的任务。在 MySQL 中,可以使用递归公用表表达式 (CTE) 有效地解决这一挑战。让我们探讨问题陈述及其解决方案。
问题陈述:
给定一个具有分层结构的 MySQL 表(例如提供的模式中的表),其中每行代表一个节点,具有 ID、标题、父 ID 和其他相关信息,任务是使用单个节点检索层次结构中特定节点的所有祖先(父节点)
解决方案:
提供的解决方案利用递归 CTE 来遍历层次结构并识别由其 ID 指定的节点的父节点。以下查询演示了该方法:
SELECT T2.id, T2.title, T2.controller, T2.method, T2.url FROM ( SELECT @r AS _id, (SELECT @r := parent_id FROM menu WHERE id = _id) AS parent_id, @l := @l + 1 AS lvl FROM (SELECT @r := 31, @l := 0) vars, menu m WHERE @r <> 0) T1 JOIN menu T2 ON T1._id = T2.id ORDER BY T1.lvl DESC;
查询说明:
此查询使用单个 SQL 语句高效检索指定节点的所有父节点,为在 MySQL 中导航分层数据提供方便且高性能的解决方案。
以上是如何使用单个查询找到 MySQL 分层表中节点的所有祖先?的详细内容。更多信息请关注PHP中文网其他相关文章!