使用 2 个表的 1 个查询来计算用户的消息

Count user's messages with 1 query for 2 tables

有 2 个表:

  1. 用户
  2. 消息

我想要计数状态为 1 和状态为 2 的消息。这是我正在尝试做的事情

SELECT u.id_user, u.email, COUNT(m.id_message) as 'viewed', COUNT(m2.id_message) as 'not viewed'
FROM users u
LEFT JOIN messages m ON (u.id_user=m.id_user AND m.status=1)
LEFT JOIN messages m2 ON (u.id_user=m2.id_user AND m2.status=2)
GROUP BY u.id_user

但结果很奇怪

计数器 'viewed' 和 'not views' 不能相同。我做错了什么?

你可以做条件求和

select 
u.id_user,
u.email,
sum(case when m.status=1 then 1 else 0 end) as `viewed`,
sum(case when m.status=0 then 1 else 0 end) as `not viewed`
from users u
left join messages m on m.id_user = u.id_user
group by u.id_user,u.email