我有一个简单聊天的表格:
messages table structure
+----+---------+-----------+---------+------+------+
| id | to_user | from_user | message | read | sent |
+----+---------+-----------+---------+------+------+
我需要获取每个会话的列表,格式如下。
Username ---- Message ---- Date
我将使用以下查询来完成它:
SELECT *
FROM `messages`
WHERE `sent`
IN (
SELECT MAX( `sent` )
FROM `messages`
WHERE `from_user` = '1' --id of user who is requesting the list
OR `to_user` = '1' --id of user who is requesting the list
GROUP BY `to_user` , `from_user`
)
LIMIT 0 , 30
这几乎可以正常工作,但我的问题是它并没有返回我该对话的最后一条消息,而是每个用户的最后一条消息,所以假设用户1
和2
正在交谈,我得到了以下列表:
+----+---------+-----------+-----------------------+------+---------------------+
| id | to_user | from_user | message | read | sent |
+----+---------+-----------+-----------------------+------+---------------------+
| 3 | 2 | 1 | Message 1 from user 1 | 0 | 2012-01-11 13:20:54 |
| 4 | 1 | 2 | Message 1 from user 2 | 0 | 2012-01-11 13:24:59 |
+----+---------+-----------+-----------------------+------+---------------------+
我希望只获取最后一条消息,即4,因为第四条记录中sent
字段最高,那么我该如何解决?
编辑 删除group by
后,即使用户与多个用户交谈,我也只会收到一条消息。