推进MySQL集团

时间:2012-10-19 09:39:15

标签: mysql sql group-by

我有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

但是第一个和第二个字符串是相同的对话框。我该如何对这些记录进行分组?

4 个答案:

答案 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