2016-11-01 18 views
1

私は2つのテーブル:カテゴリとアイテムを持っています。複数のIDを選択してください

table: categories 

id | parent_id | name 
------------------------------ 
1 | 0   | drinks 
2 | 1   | soft drinks 
3 | 1   | beer 

table: items 

id | category_id | name 
---------------------------- 
1 | 1   | water 
2 | 2   | coca cola 
3 | 2   | pepsi cola 
4 | 3   | stella artois 

私が何をしたいのか?私はのすべての項目をカテゴリまたはそのカテゴリのサブカテゴリ内のに数えたいと思っています。

カテゴリ「ドリンク」を選択した場合は、カテゴリ「ドリンク」のすべてのアイテムをカウントするだけでなく、サブカテゴリー「ソフトドリンク」と「ビール」のすべてのアイテムもカウントします。

左の結合とは関係がありますが、わかりません。

ありがとうございます!

+0

あなたはparent'd子供のもののためのカテゴリテーブルの上に自己加入必要があると思います。あなたのアイテムは "親"カテゴリの一部になることができます - category_id = 0、 "飲み物"を持っているものが存在するでしょうか? –

+0

@MarcB、ここにいるから。私はあなたの昨日の答えにコメントしました。 [見てください](http://stackoverflow.com/a/3936986/4802649) – Phiter

+0

私の答えは、運がいいですか? – MonkeyZeus

答えて

0

これはうまくいくと思います。

select c.name, 
     (select count(*) 
      from items i 
     where i.category_id in (select c2.id 
            from category c2 
            where c.id in (c2.id, c2.parent_id) 
     ) as total 
    from category c 

これは生成する必要があります:

name  | total 
------------------- 
drinks  | 4 
soft drinks | 2 
beer  | 1 
関連する問題