首先,我很抱歉,如果有人看到我之前发布此内容,但我真的需要快速回答,而且没有1回应我的问题了。所以这是我的问题:
我有这种简单聊天的表格:
消息表结构
+----+---------+-----------+---------+------+------+
| id | to_user | from_user | message | read | sent |
+----+---------+-----------+---------+------+------+
我需要获得看起来像那个用户的每个对话列表
用户名----消息----日期
我正在使用此查询来执行此操作:
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
每个人都建议我删除GROUP BY
,但如果我这样做,那么它会返回我与一个用户的最后一次对话,我需要得到所有时间的对话,如下所示:
User-1 talked with user-2
user-1 talked with user 10
user-1 talked with user 32 and so on...
这个工作几乎没问题,我的问题是它返回的不是那个会话的最后一条消息,而是来自每个用户的最后一条消息所以让我们说用户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,因为发送的字段是第4条记录中最高的,所以我该如何解决呢?