0

在此处输入图像描述

对于我的用户的收件箱,我想只获取对话中最后一条消息的主题。

如您所见,ID 为 1 的用户正在进行 2 个对话。一个与 QA 和一个与 Admin。所以我想获取消息id:4和id:6的主题。

我尝试使用 DISTINCT 和 GROUP BY created_at 在单个查询中执行此操作,但没有成功。id 和 created_at 都可用于获取对话中的最后一条消息,但我更喜欢使用 created_at。

4

3 回答 3

0
select 
  *,
  least   (from_user_id, to_user_id) as min_uid,
  greatest(from_user_id, to_user_id) as max_uid
from
  (select * from message order by id desc) as message_reversed
group by
  min_uid,
  max_uid
于 2013-10-17T11:11:32.413 回答
0
SELECT id
     , created_at
     , from_user_id
     , to_user_id
     , subject
     , text 
  FROM message m
  JOIN 
     ( SELECT MAX(id) max_id
         FROM message
        GROUP
           BY LEAST(from_user_id,to_user_id)
            , GREATEST(from_user_id,to_user_id)
     ) x
    ON x.max_id = m.id;
于 2013-10-17T11:12:37.543 回答
-1

鉴于“id”是一个自动递增的主键,并且您知道正在使用的用户的 id,为什么不这样查询呢?

SELECT `text` as `lastMessage` 
FROM `yourTable` 
WHERE `from_user_id` = 1 
ORDER BY `id` DESC 
LIMIT 0,1
于 2013-10-16T14:17:12.790 回答