You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过MySQL查询获取聊天消息表的唯一相关详情?

嘿,我看你是想拿到和用户ID为6相关的聊天消息的唯一详情,应该是要每个对话的最新那条记录吧?我来给你梳理下怎么实现。

先明确你的表结构与示例数据

你的enrich_chat_message表结构和现有数据如下:

idsent_bymessagereadreceived_bycreated_atupdated_at
7866Hi012018-04-26 13:00:152018-04-26 13:00:15
774211Hello162018-04-26 12:20:252018-04-26 12:59:59
7721hi162018-04-26 12:19:282018-04-26 13:00:14

解决方案:获取每个对话的最新消息详情

你原来的查询思路是对的,但需要完善分组逻辑,确保能按对话对象分组取最新消息。这里用子查询先找出每个对话的最大消息ID,再关联原表拿到完整的消息详情:

SELECT m.*
FROM enrich_chat_message m
INNER JOIN (
    -- 先分组找出每个聊天对象对应的最新消息ID
    SELECT 
        -- 确定对话的对方用户:如果当前用户是发送方,对方就是接收方,反之亦然
        CASE 
            WHEN sent_by = 6 THEN received_by 
            ELSE sent_by 
        END AS chat_partner,
        MAX(id) AS latest_msg_id
    FROM enrich_chat_message
    -- 筛选出所有和用户6相关的消息
    WHERE sent_by = 6 OR received_by = 6
    GROUP BY chat_partner
) AS latest ON m.id = latest.latest_msg_id
-- 按消息创建时间倒序,最新的消息排在最前面
ORDER BY m.created_at DESC;

执行结果说明

运行这个查询后,你会得到用户6和每个聊天对象的最新一条消息:

  • 和用户1的最新消息是ID为786的「Hi」(用户6发给用户1,未读状态)
  • 和用户211的最新消息是ID为774的「Hello」(用户211发给用户6,已读状态)

如果你的需求是其他类型的「唯一详情」(比如所有未读消息的唯一记录),只需要在主查询的WHERE条件里加上对应的筛选,比如AND m.read = 0就可以了。

内容的提问来源于stack exchange,提问作者user3201500

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:42:55