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