0

我一直在用这个来拉头发,我有一个用于网站的消息传递系统,用户可以在其中互相发送消息,收件箱现在会向您显示消息列表(例如老式短信),但我想做更现代,给人一种更像 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

现在,我遇到的困难是加载邮件,按发件人 ID 对它们进行分组,并添加最新日期的发件人的邮件,从最旧到最新排序

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

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

最新消息的发件人ID在前,依此类推。

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

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

不幸的是,该查询不起作用,它只对发件人的

同样,这里的目标是加载发送给登录用户的所有消息,但按发件人 ID 和为消息添加的最新日期对它们进行排序

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

4

1 回答 1

0

这个怎么样?

SELECT senderid, recipientid, MAX(dateadded) AS MAX_dateadded
FROM messages
WHERE recipientid = :user_id
GROUP BY senderid
ORDER BY MAX_dateadded DESC
于 2013-04-08T16:38:34.520 回答