我一直在用我的头发拉我的头发,我有一个网站的消息系统,用户可以互相发送消息,收件箱现在会显示一个消息列表(如旧学校短信)但我想要使它更现代化,并给它一个更像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对我帮助很大,我非常感谢所有的帮助。
答案 0 :(得分:0)
这个怎么样?
SELECT senderid, recipientid, MAX(dateadded) AS MAX_dateadded
FROM messages
WHERE recipientid = :user_id
GROUP BY senderid
ORDER BY MAX_dateadded DESC