【发布时间】:2017-02-08 12:31:14
【问题描述】:
表结构
id
user_id_1
user_id_2
message
create_date
样本数据
1 - 1 - 2 - "lorem ipsum" - 05.20.2016 15:12:11
2 - 2 - 1 - "lorem ipsum dolor" - 05.20.2016 15:12:12
3 - 3 - 1 - "lorem ipsum dolor sit" - 05.20.2016 15:12:13
4 - 1 - 2 - "lorem ipsum dolor sit amet" - 05.20.2016 15:12:14
我有一张用于发送消息的表格。我想列出用户(id:1)的消息列表。我在下面使用sql语句。
SELECT * FROM messages
WHERE (`user_id_1` = 1 OR `user_id_2` = 1)
GROUP BY IF(`user_id_1`=1,`user_id_2`,`user_id_1`)
ORDER BY create_date DESC
使用 group by 我只能获取每个用户一次,但问题是 GROUP BY 使用第一行。比如,对于user_id_1: 1,我想得到id:4,但它显示的是id:1。
摘要:任务是列出用户与最后一条消息的对话。有没有办法只用一个 SQL 语句,而不使用"SELECT * FROM (SELECT * FROM ... ORDER BY) GROUP BY" 方式。
谢谢。
【问题讨论】: