使用递归在 MySQL 表中查找父级
在数据库模式中,建立层次关系很常见。查询此类数据时,不仅需要检索特定记录,还需要检索它们的层次结构连接。本文将解决使用单个查询在 MySQL 表中查找记录的所有父级的任务。
问题陈述
给定一个包含列 ID、TITLE 的表、CONTROLLER、METHOD 和 PARENT_ID,使用单个 SQL 查找 TITLE 为“Categories”的记录的所有父项查询。
所需输出
输出应显示以下内容列:
并且应该获取记录:
id | title | controller | method | url | parent_id |
---|---|---|---|---|---|
3 | Modules | admin | modules | (NULL) | 0 |
17 | User Modules | modules | user_module | (NULL) | 3 |
31 | Categories | categories | category | (NULL) | 17 |
解决方案
要获得所需的输出,我们需要利用MySQL的递归查询功能。这是我们可以使用的 SQL 查询:
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;
让我们分解这个查询:
通过执行通过此查询,我们可以在单个数据库调用中检索标题为“类别”的记录的所有父项。
以上是如何使用单个递归查询查找 MySQL 表中的所有父记录?的详细内容。更多信息请关注PHP中文网其他相关文章!