我有MySQL表,其中包含从用户到用户的所有消息:
id | to_id /*user_id*/ | from_id /*user_id*/
1 | 32 | 54
2 | 54 | 32
3 | 32 | 54
目标是获取MySQL的答案,如对话框列表user_id - 按日期排序的user_id。但是如果我做sql查询:
select * from messages group by to_id, from_id
我会得到
to_id /*user_id*/ | from_id /*user_id*/
32 | 54
54 | 32
但是第一个和第二个字符串是相同的对话框。我该如何对这些记录进行分组?
答案 0 :(得分:2)
SELECT DISTINCT LEAST(from_id, to_id), GREATEST(from_id, to_id) FROM messages
答案 1 :(得分:1)
假设您的消息表包含一个名为message_date
的字段,请尝试:
select to_id, from_id, max(message_date) latest_date
from (select to_id, from_id, message_date
from messages where to_id >= from_id
union all
select from_id to_id, to_id from_id, message_date
from messages where to_id < from_id) m
group by to_id, from_id
order by 3 desc, 1, 2
答案 2 :(得分:0)
我认为您必须存储用户回复的原始邮件的origin_id
然后,您可以通过origin_id
我没有看到任何其他方式只有原点和目的地ID
答案 3 :(得分:0)
select small_id, big_id, count(*) from
(select id,
case when to_id < from_id then to_id else from_id end as small_id,
case when to_id < from_id then from_id else to_id end as big_id
from messages) as a
group by small_id, big_id