我有类别的项目,这些类别也可以有类别如何找到第一个父类。例如......
CategoriesTbl
CategoryId | CategoryName | parent
-------------------------------------
1 | Category1 | 0
2 | Category2 | 1
3 | Category3 | 2
ItemsTbl
ItemId | CategoryId
-------------------------------------
1 | 3
如何对项目执行选择并将其连接到具有父类别(CategoryId = 1)的类别表。父类别可以无限深嵌套。
答案 0 :(得分:2)
MySQL不支持递归SQL查询。但是还有其他方法可以存储这样的父子数据,这些数据允许您使用单个SQL查询来获取整个树。
另见:
答案 1 :(得分:0)
你可以使用这样的东西作为起点。
例如,
表
Rank chid parid
7 6
5 4
4 3
3 2
2 Null
我的输出应该是
排名chiid parid
1 5 4
2 4 3
3 3 2
4 2 Null
CODE SNIPPET:
declare @table table(child int, parid int)
insert into @table
select 7, 6 union all
select 5, 4 union all
select 4, 3 union all
select 3, 2 union all
select 2, null
;with list
( tLevel,
child,
parId
) as
( select
1 as tLevel,
child,
parId
from @table a
where parId is null
union all
select
tLevel + 1,
b.child,
b.parId
from list a
join @table b
on b.parId = a.child
)
select
rank() over(order by tLevel desc)
as Rank,
child,
parId
from list
/* -------- Sample Output: --------
Rank child parId
-------------------- ----------- -----------
1 5 4
2 4 3
3 3 2
4 2 NULL
*/