一个查询上有两个单独的连接;计算与一个用户之间的所有消息

时间:2016-11-29 02:10:48

标签: mysql sql join count

我正在试图弄清楚如何显示每个用户在数据库中收到的消息数量。我有一个用户表,我想拉取用户ID(称为id)和用户名,以及一个消息表,其中包含一个id,一个fromid(来自用户的fkey),一个toid(来自用户的fkey),以及一个正文(消息的文本)。结果是这样的:

id | username | tocount | fromcount
1  | user1    | 2       | 3
2  | user2    | 1       | 1
3  | user3    | 3       | 1
4  | lastuser | 0       | 1

我怎样才能做到这一点?我尝试了许多不同的连接组合,但最终得到的结果不准确。

1 个答案:

答案 0 :(得分:1)

一种方法使用union all后跟group by

select userid, sum(fromnum) as fromcnt, sum(tonum) as tocnt
from ((select fromid as userid, 1 as fromnum, 0 as tonum
       from messages
      ) union all
      (select toid as userid, 0, 1
       from messages
      )
     ) ft
group by userid;