所以我有一个看起来像这样的表,我有用户消息存储,以及他们的状态(读取(' R')或未读(' U')) 。它们还存储有状态编号,以在消息的线程中显示它们的顺序。
messageid userid sequence status
93 250 1 A
93 250 2 U
93 250 3 U
94 250 1 A
95 250 1 U
我想计算此表中针对用户ID#250的未读消息。结果行应为:
messageid userid sequence status
93 250 3 U
95 250 1 U
我有一个简单的部分,但相信我需要内部连接SELECT(最大)。这是最容易的部分,效果很好:
SELECT messageid FROM message_recips WHERE message_recips.userid=250 AND message_recips.status='N'
下面是什么无法弄清楚添加的语法:
AND message_recips.sequence=(SELECT MAX(message_recips.sequence))
真诚感谢您的帮助,非常感谢! mySQLi或mySQL运行正常,因为我正在切换。
答案 0 :(得分:2)
对于特定用户:
SELECT COUNT(DISTINCT messageid) AS unread_messages
FROM message_recips
WHERE status = 'U'
AND userid = 250;
所有用户报告:
SELECT userid, COUNT(DISTINCT messageid) AS unread_messages
FROM message_recips
WHERE status = 'U'
GROUP BY userid;
答案 1 :(得分:1)
如果我正确理解您的问题,您希望获取状态未读的最大序列号,该序列号由messageid和userid分组。您可以使用max
聚合:
select messageid,
userid,
max(sequence),
status
from message_recips
where status = 'U'
group by messageid, userid, status