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

MySQL如何按聊天表最新记录排序查询对应用户数据?

解决方案

实现逻辑

  • 先从Chat表筛选出和用户6相关的聊天记录,按交互对象分组,提取每组的最大聊天ID作为排序依据
  • 关联User表匹配交互对象的完整用户信息
  • 过滤掉用户6自身,按最大聊天ID降序排序得到结果

适配需求的查询语句

你给出的场景中所有消息的发送方都是ID=6的用户,直接使用以下语句即可:

SELECT u.*
FROM User u
INNER JOIN (
    SELECT receiver, MAX(id) AS max_chat_id
    FROM Chat
    WHERE sender = 6
    GROUP BY receiver
) chat_sort ON u.id = chat_sort.receiver
WHERE u.id != 6
ORDER BY chat_sort.max_chat_id DESC;

拓展:兼容双向聊天场景

如果需要统计和用户6有双向收发消息的所有用户,按最近一次交互时间排序,可使用以下语句:

SELECT u.*
FROM User u
INNER JOIN (
    SELECT
        -- 提取和用户6聊天的对方ID
        CASE WHEN sender = 6 THEN receiver ELSE sender END AS contact_id,
        MAX(id) AS max_chat_id
    FROM Chat
    WHERE sender = 6 OR receiver = 6
    GROUP BY contact_id
) chat_sort ON u.id = chat_sort.contact_id
WHERE u.id != 6
ORDER BY chat_sort.max_chat_id DESC;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:18:03