2011-08-05 119 views
0

情景:我在構建能夠顯示給定架構的報告的單個查詢時遇到困難。據推測,要顯示的報告應該遵循基於乘數的計算。例如: 用戶,消息數×乘數高級MySQL組查詢

需要什麼:mysql查詢將顯示預期的查詢結果。

* schema * 
table: users 
id | name 
1 | cris 
2 | dave 
3 | jona 

table: services 
id | name 
1 | standard 
2 | premium 

table: service_users 
user_id | service_id | multiplier 
1  | 1   | 1 
1  | 2   | 2 
2  | 1   | 1 
2  | 2   | 2 
3  | 1   | 1 
3  | 2   | 2 

table: messages 
user_id | service_id | content 
1  | 1   | howdy 
1  | 1   | hey 
1  | 1   | hello 
1  | 2   | the quantity 
1  | 2   | insignificant 
2  | 1   | pill 
2  | 1   | dock 
2  | 2   | misty docks 
3  | 1   | drive 
3  | 2   | with style 
3  | 2   | like a hawk 
3  | 2   | earthling rise 

查詢結果應該是這樣的

user_id | multiplier(1) | multiplier(2) | total 
    1  | 3   | 4   | 7 
    2  | 2   | 2   | 4 
    3  | 1   | 6   | 7 

回答

1
SELECT users.id, 
     COUNT(IF(service_users.multiplier = 1, 1, NULL) AS m1, 
     COUNT(IF(service_users.multiplier = 2, 1, NULL) AS m2 
     FROM users, messages, service_users 
     WHERE users.id = messages.user_id AND 
      messages.user_id = service_users.user_id 
      messages.service_id = service_users.service_id 
     GROUP BY users.id 
+0

真棒!這是我一直在尋找的解決方案。 –

+0

順便說一句,當我將總數「m1 + m2」追加到查詢中時,會出現一個sql錯誤,其中顯示「字段列表」中的「未知列'm1'」。 –

+0

@darkcolonist是的,這是行不通的,我把它從我的代碼中刪除,我個人更喜歡在我的應用程序中執行'm1 + m2',你仍然可以在MySql中使用兩個變量'@ m1:= COUNT(... ','@ m2:= COUNT(...'然後是@ @ m1 + @ m2'。 – nobody