0

因此,我已经看到使用多个表完成了此操作,但对如何使用多个表感到困惑。我想选择锦标赛中正确参赛的数量。这有效,除非用户没有正确。然后它返回 NULL。我希望它返回 0。

Table-tournament_entries

Column  
=============       
id      
tournament_id           
game_id 
user_id 
username    
prediction      
correct 

这是我运行的查询,我希望返回所有用户,即使是那些没有正确回答问题的用户。

SELECT 
  tournament_id, username, user_id, COUNT(`prediction`)
FROM 
  tournament_entries
WHERE 
  correct = 1 AND tournament_id = 1
GROUP BY 
  username
ORDER BY 
  COUNT(`prediction`) DESC
LIMIT 0,10

编辑:对不起所有的混乱,所以当我运行我的查询时,我得到了这个

username    user_id     CorrectAns
mj          455              10
charlie     1                8
bill        2                8
doug        51               7

但也有未显示的用户获得了 0 的权利。当我运行建议的查询时,我会收到问题的数量。

username    user_id     CorrectAns
mj          455              16
charlie     1                16
bill        2                16
doug        51               16
sydney      452              16
Joe         218              16

如果您注意到 sydney 和 joe 不在第一个输出中,而是在第二个输出中

4

2 回答 2

1

使用此查询:

$query ="SELECT tournament_id, username, user_id, COALESCE(COUNT(`prediction`),0) as cpred
FROM tournament_entries
WHERE tournament_id = 1
GROUP BY username
ORDER BY cpred DESC
LIMIT 0,10"

COALESCE将返回给它的第一个非空参数。

干杯。

于 2013-04-07T01:03:24.373 回答
0

根据您对另一个答案的评论,我认为您真正要寻找的是这样的(尽管如果没有样本数据和输出很难确定):

SELECT 
  username, user_id, Sum(correct) As TotalCorrect
FROM 
  tournament_entries
WHERE 
  tournament_id = 1
GROUP BY 
  username, user_id
ORDER BY 
  TotalCorrect DESC
LIMIT 0,10
于 2013-04-07T01:26:37.513 回答