gpt4 book ai didi

mysql - 私有(private)消息系统。列出每个对话的最后一条消息

转载 作者:可可西里 更新时间:2023-11-01 06:32:38 25 4
gpt4 key购买 nike

假设这是数据库结构:

enter image description here

SELECT * FROM `pms` where id_to = 1 or id_from = 1

这将返回他收到或发送的所有消息,

那么我如何从用户 1 可能拥有的每个对话中检索最后一条消息?

PD:当两个用户之间有一条或多条消息时,我称之为对话

-编辑-

因此给定此数据库内容:

enter image description here

我们想得到id 4和6

最佳答案

假设 id 是一个自增列:

SELECT MAX(id) AS id
FROM pms
WHERE id_to = 1 OR id_from = 1
GROUP BY (IF(id_to = 1, id_from, id_to))

假设您有 id_fromid_to 索引,这种变体很可能会执行得更好,因为 MySQL 不知道如何处理 OR:

SELECT MAX(id) AS id FROM
(SELECT id, id_from AS id_with
FROM pms
WHERE id_to = 1
UNION ALL
SELECT id, id_to AS id_with
FROM pms
WHERE id_from = 1) t
GROUP BY id_with

以下是获取这些 ID 的消息的方法:

SELECT * FROM pms WHERE id IN
(SELECT MAX(id) AS id FROM
(SELECT id, id_from AS id_with
FROM pms
WHERE id_to = 1
UNION ALL
SELECT id, id_to AS id_with
FROM pms
WHERE id_from = 1) t
GROUP BY id_with)

关于mysql - 私有(private)消息系统。列出每个对话的最后一条消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12160243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com