MySQL 从最内的select开始执行,但是同一个select clause可以在查询的结果上继续查询。
SELECT menu_id,parent_id,
(SELECT m1.parent_id FROM sys_menu AS m1 WHERE m1.menu_id=m.parent_id)
FROM sys_menu AS m WHERE m.menu_id = 89
方案1.通过recursive递归
使用MySQL的CTE 方法,通过子节点向上查询
SELECT DISTINCT * FROM (
WITH recursive recur_menu_nodes_child AS (
SELECT
m.*
FROM
sys_menu AS m,
sys_user AS u,
sys_role AS r,
sys_role_menu AS rm
WHERE
u.user_role = r.role_id
AND r.role_id = rm.role_id
AND m.menu_id = rm.menu_id
AND u.user_id = 1
UNION ALL
SELECT n.* FROM sys_menu AS n
JOIN recur_menu_nodes_child pn ON pn.parent_id = n.menu_id
)
SELECT * FROM recur_

本文介绍了在MySQL中使用递归查询(CTE)和变量赋值两种方法来查询多级菜单结构,包括通过子节点向上查询的CTE示例以及针对单个节点的变量赋值解决方案,以满足不同场景的需求。

最低0.47元/天 解锁文章
3828

被折叠的 条评论
为什么被折叠?



