2011-08-05 81 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