所以有一个在线投注网站,我想计算每个用户的投注和胜利(他选择的选项是正确的/赢家没有赢得投注 - >每个投注可能有很多选项)
这是我表格的简化结构
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!
答案 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