我有一个mysql语句
SELECT *
FROM tbl_messages
WHERE to_user_id = '$user_id' OR from_user_id = '$user_id'
GROUP BY from_user_id
ORDER BY date_sent DESC
它产生了正确的结果,但它们的顺序不正确。
分组效果很好,但组中显示的记录是输入数据库的第一条记录,但我希望在每个组中显示最新记录。
有没有办法让每个组显示最新的记录?
2011-12-19 12:16:25 This is the first message
2011-12-19 12:18:20 This is the second message
2011-12-19 12:43:04 This is the third message
该组显示“这是第一条消息”,我想要“这是第三条消息”,因为这是最新的记录/消息。
干杯
最佳答案
这可能有效(但不能保证):
SELECT *
FROM
( SELECT *
FROM tbl_messages
WHERE to_user_id = '$user_id' OR from_user_id = '$user_id'
ORDER BY date_sent DESC
) tmp
GROUP BY from_user_id
ORDER BY date_sent DESC
这应该有效:
SELECT t.*
FROM
tbl_messages AS t
JOIN
( SELECT from_user_id
, MAX(date_sent) AS max_date_sent
FROM tbl_messages
WHERE to_user_id = '$user_id' OR from_user_id = '$user_id'
GROUP BY from_user_id
) AS tg
ON (tg.from_user_id, tg.max_date_sent) = (t.from_user_id, t.date_sent)
ORDER BY t.date_sent DESC
关于MySQL 选择 GROUP BY 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8556283/