我已经为此奋斗了几个小时。我正在对消息传递系统进行编码,并且我的表包含以下列:
ID(UUID)| from_user_id(uuid)| to_user_id(uuid)| 主题| 身体| created_at
在收件箱页面中,我需要将结果按subject + from_user_id分组。这是必需的,因为如果主题相同,那么它将是一个单独的对话,并且from_user_id应该与主题串联在一起,以确保如果其他用户将发送具有相同主题的消息,则不会与其他对话合并。
第二件事是,对于每个小组,我需要获得第一条消息以显示为对话封面消息。如果我使用普通ID,但是使用UUID,这将很容易解决问题,因此我不能为它们使用min或max。因此,我需要使用created_at字段来确定哪一行是最后一行。
我尝试了许多不同的方法,但无法获得所需的结果。也许以前有人遇到过类似的问题并有解决方案?
select msg.id, msg.body, msg.created_at, concat(msg.from_user_id, msg.subject) as concat
from messages as msg
where msg.to_user_id = '8d99eb39-24f8-4dd6-b984-9505cd3eb6b6'
order by msg.created_at desc limit 10 offset 0
基本上,您需要子查询来标识每个线程中的最后一条消息,然后针对该子查询进行选择以从每个最后一个消息中获取详细信息
select * from messages
where to_user_id = 'jim'
and concat(from_user_id, subject, created_at) in (
select max(concat(from_user_id, subject, created_at))
from messages
where to_user_id = 'jim'
group by concat(from_user_id, subject))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句