消息系统的MYSQL GROUP和ORDER

时间:2013-04-08 15:33:07

标签: mysql messaging

我一直在用我的头发拉我的头发,我有一个网站的消息系统,用户可以互相发送消息,收件箱现在会显示一个消息列表(如旧学校短信)但我想要使它更现代化,并给它一个更像Facebook的感觉。 表格非常基本

id  senderid    recipientid dateadded   message
--------------------------------------------------------------------
1   1              2        2013-04-01  hello1
2   3              2        2013-04-02  hello2
3   1              2        2013-04-03  hello3
4   3              2        2013-04-04  hello4
5   3              2        2013-04-05  hello5
6   4              2        2013-04-06  hello6

现在,我正在努力加载邮件,通过senderid将邮件分组,最新的日期添加,发件人的邮件从最旧到最新订购​​

所以我希望上面的表格像这样加载

id  senderid    recipientid dateadded   message
--------------------------------------------------------------------
5   3              2        2013-04-05  hello5
4   3              2        2013-04-04  hello4
2   3              2        2013-04-02  hello2
3   1              2        2013-04-03  hello2
1   1              2        2013-04-01  hello1
6   4              2        2013-04-01  hello1

发件人首先发送最新消息,依此类推。

以下是我刚刚根据其他类似帖子使用的查询

SELECT m.*
FROM messages m 
INNER JOIN (
SELECT senderid, recipientid, dateadded
FROM messages
WHERE recipientid = :user_id
GROUP BY senderid
ORDER BY dateadded DESC
) senders ON m.senderid = senders.senderid
ORDER BY senders.dateadded DESC

不幸的是,查询只是不起作用,它只对发送者的

进行分组

此处的目标再次是加载发送给登录用户的所有邮件,但是由senderid订购,并为邮件添加最新日期

提前感谢您的任何评论,Stackoverflow对我帮助很大,我非常感谢所有的帮助。

1 个答案:

答案 0 :(得分:0)

这个怎么样?

SELECT senderid, recipientid, MAX(dateadded) AS MAX_dateadded
FROM messages
WHERE recipientid = :user_id
GROUP BY senderid
ORDER BY MAX_dateadded DESC