PHP如何返回每组用户的最新条目?

PHP如何返回每组用户的最新条目?,php,mysql,limit,Php,Mysql,Limit,我正在尝试根据一组发件人的时间戳返回最新消息 基本表和qry如下所示 SELECT senderName, messages FROM MessageTable WHERE receiverID = 1 (output) Joe "Hey" Bob "Yo" Jim "Blah" Joe "What's up" 我想从每个发件人那里得到最新消息。我想使用orderby和LIMIT,但它只返回整个qry中的一条消息。这不是我想要的结果 SELECT senderName, messages F

我正在尝试根据一组发件人的时间戳返回最新消息

基本表和qry如下所示

SELECT senderName, messages
FROM MessageTable
WHERE receiverID = 1

(output)
Joe "Hey"
Bob "Yo"
Jim "Blah"
Joe "What's up"
我想从每个发件人那里得到最新消息。我想使用orderby和LIMIT,但它只返回整个qry中的一条消息。这不是我想要的结果

SELECT senderName, messages
FROM MessageTable
WHERE receiverID = 1
ORDER BY sentDate ASC LIMIT 1

(output)
Bob "Yo"
我希望有这种输出,其中只有Joe的最新消息与其他发件人的最新消息一起返回

Bob "Yo"
Jim "Blah"
Joe "What's up"
我已经看了关于stackoverflow的另一个问题,但对我来说没有意义。

谢谢大家!

分组是你的朋友

你可以这样做:

SELECT senderName, messages
FROM MessageTable
GROUP BY senderName
ORDER BY sentDate DESC

好的,经过一番搜索和反复试验,这个查询返回了我要查找的内容:

SELECT a.senderName, a.messages, a.sentDate
FROM MessageTable AS a,
(
    SELECT senderName, MAX(sentDate) as max_date
    FROM MessageTable
    WHERE ReceiverID = 1
    GROUP BY senderName
) AS b
WHERE a.senderName = b.senderName
AND a.sentDate = b.max_date;

所有的功劳都归于这个网站:

这种类型的查询称为排名查询,它们通常需要一定程度的能力。这里有一个类似的问题:


最好是使用数字ID而不是字符串来操作,以使查询足够有效。

我一直认为GROUP BY的用法不可靠,因为我找不到任何文档,说明它使用的字段没有列在GROUP BY子句中,也没有包装在聚合函数中。我认为这是MySQL的一个怪癖,不能指望其他大多数RDBMS会拒绝这一说法,我相信。@liamgriffiths这就到了!它现在返回每个发送者的消息,但不返回Joe的最新消息。这是乔最早的归来。我尝试了ASC,这改变了整个报税表的排序顺序。