Select and count 从两个表查询
Select and count query from two tables
我必须检索所有已向给定用户发送消息的人,如果消息尚未阅读,return 号码。
我有两个 table
users
| id_user| username | status |
| 1 | user1 | yes |
| 2 | user2 | yes |
| 3 | user3 | yes |
messages
| id_message |id_sender|id_dest| message | read |
| 1 | 1 | 2 | some text | yes |
| 2 | 3 | 2 | some text | no |
| 3 | 2 | 1 | some text | no |
我有这个查询
select id_sender,username, count(distinct id_message) as nr_messages
FROM messages
INNER JOIN users
ON id_sender = id_user
WHERE id_dest=$dest and status='yes'
GROUP by id_sender
我可以计算每个用户的消息数量,但我不知道有多少未读消息。如果消息未读,我必须有一个数字,如果用户没有未读消息,则为 0。
例如 user2
sender: user3 (1 unread message)
sender: user1 (0 unred message)
消息 table 是 ~2000000 行
如果需要同时统计已读和未读,可以使用条件求和作为
select
m.id_sender,
u.username,
sum(m.`read` = 'yes') as read_messages,
sum(m.`read` <> 'yes') as unread_messages
from messages m
join users u on u.id_user = m.id_sender
where m.id_dest = 2
group by m.id_sender ;
对于上述示例数据,您将得到
+-----------+----------+---------------+-----------------+
| id_sender | username | read_messages | unread_messages |
+-----------+----------+---------------+-----------------+
| 1 | user1 | 1 | 0 |
| 3 | user3 | 0 | 1 |
+-----------+----------+---------------+-----------------+
我必须检索所有已向给定用户发送消息的人,如果消息尚未阅读,return 号码。 我有两个 table
users
| id_user| username | status |
| 1 | user1 | yes |
| 2 | user2 | yes |
| 3 | user3 | yes |
messages
| id_message |id_sender|id_dest| message | read |
| 1 | 1 | 2 | some text | yes |
| 2 | 3 | 2 | some text | no |
| 3 | 2 | 1 | some text | no |
我有这个查询
select id_sender,username, count(distinct id_message) as nr_messages
FROM messages
INNER JOIN users
ON id_sender = id_user
WHERE id_dest=$dest and status='yes'
GROUP by id_sender
我可以计算每个用户的消息数量,但我不知道有多少未读消息。如果消息未读,我必须有一个数字,如果用户没有未读消息,则为 0。 例如 user2
sender: user3 (1 unread message)
sender: user1 (0 unred message)
消息 table 是 ~2000000 行
如果需要同时统计已读和未读,可以使用条件求和作为
select
m.id_sender,
u.username,
sum(m.`read` = 'yes') as read_messages,
sum(m.`read` <> 'yes') as unread_messages
from messages m
join users u on u.id_user = m.id_sender
where m.id_dest = 2
group by m.id_sender ;
对于上述示例数据,您将得到
+-----------+----------+---------------+-----------------+
| id_sender | username | read_messages | unread_messages |
+-----------+----------+---------------+-----------------+
| 1 | user1 | 1 | 0 |
| 3 | user3 | 0 | 1 |
+-----------+----------+---------------+-----------------+