所以,我有这个表结构
+----+---------+-----------+---------+------+---------------------+
| id | to_user | from_user | message | read | sent |
+----+---------+-----------+---------+------+---------------------+
| 1 | 2 | 1 | test | 0 | 2012-01-11 13:20:14 |
+----+---------+-----------+---------+------+---------------------+
正如你所看到的,我用这个非常简单的聊天,现在我想做的就是得到每个对话的清单。因此,我需要找到一种方法,从每个用户的会话中选择一个最后一条消息。所以我需要像
这样的东西 select *
from `messages`
where `to_user` = 2 --(this is my user id)
and `to_user` = `from_user`
LIMIT 1
现在我知道LIMIT
总会返回1条记录而其他逻辑可能不太好,无论如何,如果有人得到我想要的东西,可以帮助我一点点。)
答案 0 :(得分:2)
IN()
子查询选择两个用户之间具有最新id
的每一行的sent
。外部查询选择从子查询返回的每个id
的剩余列。
SELECT * FROM table WHERE id IN (
SELECT id FROM table GROUP BY to_user, from_user HAVING sent = MAX(sent)
);