我想使用包含父节点和子节点的相同表来加载动态菜单。 表结构:
COMPID | ParentID | MenuName
----------------------------
1 | 1 | Menu 1
2 | 2 | Menu 2
3 | 1 | Menu 3 of Child 1
4 | 1 | Menu 4 of Child 1
5 | 4 | Menu 5 of Child 4 of Child 1
可能有一种以上的技术。但我需要知道是否可以使用recursion动态加载它? 如果是,那么让我举个例子。
答案 0 :(得分:2)
ANSI SQL支持使用公用表表达式的递归查询。
以下使用ANSI SQL检索每个菜单项的完整路径:
with recursive menu_tree as (
select compid, parentid, menuname, menuname as menu_path
from menus
where compid = parentid -- the root nodes
union all
select c.compid, c.parentid, c.menuname, p.menu_path||'/'||c.menuname
from menus c
join menu_tree p
on c.parentid = p.compid
and c.parentid <> c.compid
)
select compid, menu_path
from menu_tree;
SQLFiddle示例:http://sqlfiddle.com/#!15/fbfba/1