2016-09-23 6 views
1

私は、各タイプの国、州、地域、町を持つカテゴリテーブルを持っています。アイテムの親は、それが位置する地域、州または国です。次に、それらのIDを持つオブジェクトを持つテーブルがあります。特定のカテゴリとオブジェクトが公開されているかどうか。1つのクエリ内の1つのテーブルのSQLサブグループ

table: category 
id title  parent type published 
75 Spain  0  1  1 
76 Mallorca 75  2  1 
144 North  76  3  1 
149 South  76  3  1 
148 East  76  3  1 
147 West  76  3  1 
170 Cala  144  4  1 
195 Puebla  144  4  0 
166 Pica  149  4  1 
189 Playa  148  4  0 
199 Santa Ana 148  4  1 
247 Puerto  147  4  1 
... 

table: objects 
id title  country_id  state_id region_id town_id  published 
4 Alba  75    76   149   195   1 
5 Gris  75    76   144   170   1 
8 Casa  75    76   148   199   1 
8 Pueblo  75    76   147   247   1 
8 Don Carlo 75    76   148   199   1 
... 

結果は、各国、州、地域、町のオブジェクトの正しい数でカテゴリタイプごとにグループ化された名前のリストにする必要があります。

id  title  parent  type   obj_count 
75  Spain  0   1   12 
76  Mallorca 75   2   4 
144  North  76   3   2 
149  South  76   3   3 
148  East  76   3   0 
147  West  76   3   1 
170  Cala  144   4   0 
166  Pica  149   4   1 
189  Playa  148   4   0 
195  Puebla  144   4   1 
247  Puerto  147   4   1 
199  Santa Ana 148   4   2 
and so on... 

私がこれまで持っているクエリは、正しい順序で名前の完全なリストを返しますが、私はWHERE ob.published = 1」をチェックしてみたら、町のために(未発表を含む)が、唯一のフルカウントAND c.published = 1 'は、国、州、地域ではなく町を返します。

SELECT 
c.id as id, c.title as title, c.type as type, c.parent as parent, 
count(ob.town_id) as obj_count 

FROM category AS c 
LEFT JOIN category AS r  ON c.id = r.parent 
LEFT JOIN category AS u  ON r.id = u.parent 
LEFT JOIN category AS o  ON u.id = o.parent 

LEFT JOIN objects AS ob  ON ob.town_id = c.id 

WHERE 1 
GROUP BY type, id, parent 
ORDER BY parent, title 

私はこれを1つのクエリで行うことができますか?ありがとうございました。

+0

あなたはカウントする必要がありますか? –

答えて

0
SELECT c.id, c.title, c.type, count(c.id) as cnt 
FROM category c 
LEFT JOIN objects o ON (o.country_id = c.id OR o.state_id = c.id OR o.region_id = c.id OR o.town_id = c.id) 
GROUP BY c.id 
ORDER by type 
関連する問題