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 に答える