2016-10-23 9 views
-1

は、私はすべて特定のCATEGORY_IDの両親の上に示した単一のクエリをしたい特定のカテゴリIDのすべての親ノートを特定のSQLテーブルから取得するにはどうすればよいですか?ここ

enter image description here

.....私カテゴリテーブルです。例:クエリで私7は、そのようになる結果= CATEGORY_ID定義する場合:

7携帯用電子機器6

6 ELECTRONICS 1

1の親をヌル次にクエリが終了します。要するに、私はただ特定のcategory_idのすべての親を欲しい。

ありがとうございます。

+1

出力をどのように見たいですか? –

+0

特定のcategory_idの上のすべての親を示す単一のクエリが必要です。例:問合せでcategory_id = 7を定義すると、結果は次のようになります。7 PORTABLE ELECTRONICS 6 ..... 6 ELECTRONICS 1 ... 1の親がNULLで、問合せが終了します。要するに、私はただ特定のcategory_idのすべての親を欲しい。 –

+0

http://dba.stackexchange.com/questions/7147/find-highest-level-of-a-hierarchical-field-with-vs-without-ctesをご覧ください –

答えて

0
set @category := 7 
; 

select  l.n 
      ,elt(l.n,c1.category_id,c2.category_id,c3.category_id,c4.category_id,c5.category_id,c6.category_id,c7.category_id,c8.category_id,c9.category_id)  as category_id 
      ,elt(l.n,c1.name,c2.name,c3.name,c4.name,c5.name,c6.name,c7.name,c8.name,c9.name)                 as parent_name 

from     category as c1 
      left join category as c2 on c2.category_id = c1.parent 
      left join category as c3 on c3.category_id = c2.parent 
      left join category as c4 on c4.category_id = c3.parent 
      left join category as c5 on c5.category_id = c4.parent 
      left join category as c6 on c6.category_id = c5.parent 
      left join category as c7 on c7.category_id = c6.parent 
      left join category as c8 on c8.category_id = c7.parent 
      left join category as c9 on c9.category_id = c8.parent 

      cross join (   select 1 as n 
         union all select 2 
         union all select 3 
         union all select 4 
         union all select 5 
         union all select 6 
         union all select 7 
         union all select 8 
         union all select 9 
         ) l 

where  c1.category_id = @category 

     and l.n <= 
      case 
       when c9.category_id is not null then 9 
       when c8.category_id is not null then 8 
       when c7.category_id is not null then 7 
       when c6.category_id is not null then 6 
       when c5.category_id is not null then 5 
       when c4.category_id is not null then 4 
       when c3.category_id is not null then 3 
       when c2.category_id is not null then 2 
       when c1.category_id is not null then 1 
      end 
; 
+0

それは単一の親を与えるだけです、私が7を入力すると、7の親が6になりますが、7の親が6であり、6の親が1のように、すべての親が欲しいです。 –

+0

いいえ、すべての親を与えます。内側のクエリを実行して確認してください。ユーザーが1,2,6,7を取得する必要があります。 –

+0

ユーザーが7を入力すると、7の直接の親を表示する必要があります。 –

関連する問題