我有这3张 table
users [ id , username, password ]
logs [ id, user_id, action ]
user_propeties [ id, user_id, prop_name, prop_value ]
我想仅根据用户 ID 从 2 个表中选择具有 Count(logs.id) 和 count(user_propeties.id) 的所有用户列,其中 prop_value 为 NULL
我有以下查询
SELECT t1.*, count(t2.`id`) as total_logs,count(t3.`id`) as total_propeties
FROM `users` t1
LEFT JOIN `user_propeties` t2
ON t1.`id` = t2.`user_id` AND ISNULL(t2.`prop_value`)
LEFT JOIN `logs` t3
ON t3.`user_id` = t1.`id`
GROUP BY t1.id
ORDER BY t1.id DESC
返回行,但计数值错误。我做错了什么?谢谢
最佳答案
我怀疑您需要一些DISTINCT
,否则它将返回日志和属性的所有组合的计数;
SELECT t1.*, COUNT(DISTINCT t2.`id`) as total_logs,
COUNT(DISTINCT t3.`id`) as total_propeties
FROM `users` t1
LEFT JOIN `user_propeties` t2
ON t1.`id` = t2.`user_id` AND ISNULL(t2.`prop_value`)
LEFT JOIN `logs` t3
ON t3.`user_id` = t1.`id`
GROUP BY t1.id
ORDER BY t1.id DESC
关于MySQL 左连接与多个计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23875649/