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


PHP How To Return Latest Entries Per Set Of Users?

我试图返回基于时间戳的最新消息从一组发送者。

基本表和查询如下所示

SELECT senderName, messages
FROM MessageTable
WHERE receiverID = 1
(output)
Joe "Hey"
Bob "Yo"
Jim "Blah"
Joe "What's up"

我想从每个发送者那里得到最新的消息。我想使用ORDER BY和LIMIT,但它只从整个查询返回1条消息。这不是我想要的结果。

SELECT senderName, messages
FROM MessageTable
WHERE receiverID = 1
ORDER BY sentDate ASC LIMIT 1
(output)
Bob "Yo"

我希望有这样的输出,其中只有Joe的最新消息与其他Sender的最新消息一起返回。

Bob "Yo"
Jim "Blah"
Joe "What's up"

我在stackoverflow上看了另一个问题,但它对我来说没有意义。https://stackoverflow.com/questions/384142/how-to-get-latest-record-for-each-day-when-there-are-multiple-entries-per-day

谢谢!

GROUP BY is your friend http://dev.mysql.com/doc/refman/5.0/en/group-by-modifiers.html

你可以这样做:

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;

所有的功劳归于这个网站:http://forums.devarticles.com/general-sql-development-47/select-max-datetime-problem-10210.html

这类查询被称为"排名查询",它们通常需要一定程度的能力。下面是一个类似的问题:检索每个组

中的最后一条记录

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