我正在使用MySQL数据库来存储我的SQL表看起来像这样的聊天消息
id sent_by message read received_by created_at updated_at
786 6 Hi 0 1 2018-04-26 13:00:15 2018-04-26 13:00:15
774 211 Hello 1 6 2018-04-26 12:20:25 2018-04-26 12:59:59
772 1 hi 1 6 2018-04-26 12:19:28 2018-04-26 13:00:14
以上数据来自我,结果如下:
SELECT *
FROM `enrich_chat_message`
WHERE id IN (SELECT MAX(id) AS id
FROM `enrich_chat_message`
WHERE received_by=6 OR sent_by=6
GROUP BY sent_by)
ORDER BY created_at DESC
但我希望有这样的记录
id sent_by message read received_by chat_with created_at updated_at
786 6 Hi 0 1 1 2018-04-26 13:00:15 2018-04-26 13:00:15
774 211 Hello 1 6 211 2018-04-26 12:20:25 2018-04-26 12:59:59
此处在以上所需输出中,我添加了一个新列chat_with
一个唯一列,该列显示sent_by
和received_by
的唯一值。 “6”是我自己的当前用户名,用户从该用户名登录。
所以我想用它来显示聊天的DESC顺序中的所有聊天。我不希望这里重复数据。不应在1
中重复使用chat_with
。
寻找任何改进查询的建议。
谢谢! (提前)
答案 0 :(得分:0)
我认为这就是你想要的:
SELECT emc.*,
(CASE WHEN emc.received_by = 6 THEN emc.sent_by ELSE emc.received_by END) as chat_with
FROM `enrich_chat_message` emc
WHERE emc.id IN (SELECT MAX(emc2.id) AS id
FROM `enrich_chat_message` emc2
WHERE 6 IN (emc2.received_by, emc2.sent_by)
GROUP BY (CASE WHEN emc2.received_by = 6 THEN emc2.sent_by ELSE emc2.received_by END)
)
ORDER BY emc.created_at DESC;
CASE
表达式的目的是获取其他用户。