需求背景
一个消息记录表,要取出与当前用户相关的消息记录,然后两个相同用户之前的消息只展示最新发送一条,重复的去掉
数据表
预期效果
假如当前用户是8,以上图表数据为例, 我需要取出展示的数据应该是:记录1,记录4,记录5
请问大佬们,怎么用sql实现以上需求,
补上解决方案
在数据表加了一个group字段,把发送用户id和接收用户id 按用户id从小到大的顺序拼接存在里面
然后查出与当前用8相关的数据,按group这个字段分组 再按send_time 排序就ok了
一个消息记录表,要取出与当前用户相关的消息记录,然后两个相同用户之前的消息只展示最新发送一条,重复的去掉
假如当前用户是8,以上图表数据为例, 我需要取出展示的数据应该是:记录1,记录4,记录5
在数据表加了一个group字段,把发送用户id和接收用户id 按用户id从小到大的顺序拼接存在里面
然后查出与当前用8相关的数据,按group这个字段分组 再按send_time 排序就ok了
只是提供一个思路,性能你需要自己再考虑
// 嵌套查询
SELECT * FROM (SELECT * FROM message ORDER BY send_time DESC ) AS tempData GROUP BY from_user_id ORDER BY id ASC
2 回答3.1k 阅读✓ 已解决
3 回答1.6k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
你的当前用户是对应的哪个字段,而且为何是拿记录1,4,5, 而不是 记录3,4,5