让我们说这是数据库结构:

SELECT * FROM `pms` where id_to = 1 or id_from = 1
Run Code Online (Sandbox Code Playgroud)
这将返回他已经收到或发送的所有邮件,
那么如何从用户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))
Run Code Online (Sandbox Code Playgroud)
假设你已经id_from和id_to索引,这种变化很可能会表现得更好,因为MySQL不知道做什么用的或做的事:
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
Run Code Online (Sandbox Code Playgroud)
以下是如何获取这些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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1695 次 |
| 最近记录: |