对于我的用户的收件箱,我想仅获得对话中最后一条消息的主题。
正如您所看到的,ID为1的用户有2个会话。一个是QA,另一个是Admin。所以我想获得消息id:4和id:6的主题。
我尝试在DISTINCT和GROUP BY created_at的单个查询中执行此操作但没有成功。 id和created_at都可用于获取会话中的最后一条消息,但我更喜欢使用created_at。
答案 0 :(得分: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
答案 1 :(得分: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;
答案 2 :(得分:-1)
鉴于“id”是一个自动递增的主键,并且您知道您正在使用的用户的ID,为什么不这样查询?
SELECT `text` as `lastMessage`
FROM `yourTable`
WHERE `from_user_id` = 1
ORDER BY `id` DESC
LIMIT 0,1