加入3个表时计数错误

时间:2014-10-06 18:59:13

标签: mysql sql

所以有一个在线投注网站,我想计算每个用户的投注和胜利(他选择的选项是正确的/赢家没有赢得投注 - >每个投注可能有很多选项)

这是我表格的简化结构

users            : id  , username , email 
user_bets        : id  , user_id  , date , amount
user_bets_options: id  , bet_id   , user_id  , status 

这是我的查询,基本上它是一个用户,计算他的赌注并计算他从第三桌获胜的选择

SELECT `users`.*,     
  count(`user_bets`.`id`) as bets,    
  count(`user_bets_options`.`id`) as wins    
FROM `users`     
LEFT JOIN `user_bets` ON `user_bets`.`user_id` = `users`.`id`    
LEFT JOIN `user_bets_options` ON `user_bets_options`.`user_id` = `users`.`id`
                              and `user_bets_options`.`status` = 1     
WHERE `email` = 'mymail@yahoo.com'     
GROUP BY `users`.`id` LIMIT 10 

所以如果我分别计算胜利和赌注(分别加入用户表),这个用户有大约94个投注和53个胜利,这是正确的

但是当我使用上面的查询计算并加入所有3个表时,两者都是4982!

2 个答案:

答案 0 :(得分:1)

在加入user_bet_options时尝试加入bet_id而不是user_id。 然后胜利计数应该是正确的。

答案 1 :(得分:0)

尝试计数(distinct --column_name--)。在列中只放置一个列名对该列没有什么特别之处,它只计算同一GROUP中有多少行。但这不是一个表现良好的东西。但这仍然是错误的,因为没有投注或胜利的用户仍然会显示至少1。

另一个更好的是:

SELECT 'users',*,
       (
         SELECT
                COUNT(1)
         FROM
                'user_bets'
         WHERE
                'user_bets'.'user_id' = 'users','id'
       ) BETS,
       (
         SELECT
                 COUNT(1)
         FROM
                 'user_bets_options'
         WHERE
                 'user_bets_options','user_id' = 'users'.'id'
         AND     'user_bets_options'.'status' = 1
       ) WINS
FROM
       'users'
WHERE 
       `email` = 'mymail@yahoo.com'
LIMIT  10