在数据库管理中,检索分层数据通常需要涉及递归算法的复杂查询。当我们需要提取分层表中给定条目的所有父节点(如上面所示)时,就会出现这样一种情况。
考虑提供的具有菜单项层次结构的表,其中每个节点都有一个 ID、标题和父 ID。我们的目标是使用单个 MySQL 查询获取标题为“Categories”的条目的所有父节点。
我们可以使用递归查询来遍历表并累积每个级别的父节点。以下查询完成此操作:
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;
运行查询将产生所需的输出:
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 层次结构中特定条目的所有父节点?的详细内容。更多信息请关注PHP中文网其他相关文章!