1

我有带有类别的项目,这些类别也可以有类别我怎样才能找到第一个父母。例如...

CategoriesTbl
CategoryId | CategoryName   | parent
-------------------------------------
1          | Category1      | 0
2          | Category2      | 1
3          | Category3      | 2

ItemsTbl
ItemId     | CategoryId
-------------------------------------
1          | 3

我怎样才能对项目进行选择并将其加入到具有父类别(CategoryId = 1)的类别表中。父类别可以嵌套无限深。

4

2 回答 2

2

MySQL 不支持递归 SQL 查询。但是还有其他方法可以存储此类父子数据,允许您使用单个 SQL 查询获取整个树。

也可以看看:

于 2012-11-01T22:28:35.617 回答
0

您也许可以使用这样的东西作为起点。

例如,

桌子

等级儿童

7 6

5 4

4 3

3 2

2 空

我的输出应该是

等级儿童

1 5 4

2 4 3

3 3 2

4 2 空

代码片段:

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
*/
于 2012-11-01T22:05:21.113 回答