3

我不擅长 Mysql 表达式,所以这是一个我想弄清楚的快速问题。我想颠倒GROUP BY表达式的顺序,以便我可以获得用户的最后一个条目。

我设法在互联网上找到了很好的例子,但我无法用我的表情来实现它们而不会收到错误。多谢你们!

SELECT messages.conv, messages.from_user, messages.to_user,
        messages.content, messages.date_posted, messages.note_read,
        messages.active, users.thumb, users.name, users.id
FROM `messages` 
INNER JOIN `users` 
    ON messages.from_user = users.id 
WHERE messages.from_user = 1 
    OR messages.to_user = 1 
GROUP BY messages.conv 
ORDER BY date_posted ASC
4

1 回答 1

4

编辑:我显然误解了您的要求,由于您没有任何聚合,您当前的查询将返回一个伪随机行GROUP BY,您想要的是每个对话的最后一行,这更像是(假设messages, likeusers具有自动递增主键称为id);

SELECT messages.conv, messages.from_user, messages.to_user,
       messages.content, messages.date_posted, 
       messages.note_read, messages.active, users.thumb, 
       users.name, users.id FROM  `messages` 
INNER JOIN  `users` 
       ON messages.from_user = users.id 
WHERE messages.id IN
      (SELECT MAX(id) FROM messages 
       WHERE messages.from_user = 1 OR messages.to_user = 1 
       GROUP BY conv);

SQLFiddle 在这里

于 2012-09-16T08:23:08.067 回答