0

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

4 回答 4

2
SELECT DISTINCT LEAST(from_id, to_id), GREATEST(from_id, to_id) FROM messages
于 2012-10-19T09:59:38.483 回答
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
于 2012-10-19T09:59:19.683 回答
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 
于 2012-10-19T09:56:46.783 回答
0

我认为您必须存储origin_id用户回复的原始消息的

然后您将有一种方法将记录分组origin_id

我没有看到任何其他方式,只有起点和目的地 id

于 2012-10-19T09:43:27.567 回答