假设这是数据库结构:
SELECT * FROM `pms` where id_to = 1 or id_from = 1
这将返回他收到或发送的所有消息,
那么我如何从用户 1 可能拥有的每个对话中检索最后一条消息?
PD:当两个用户之间有一条或多条消息时,我称之为对话
-编辑-
因此给定此数据库内容:
我们想得到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_from
和 id_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/