【发布时间】:2016-03-24 09:47:46
【问题描述】:
我知道以前有人问过类似的问题,但他们都没有同样的条件,他们的答案不适用于这种情况。
包含消息的表格如下所示:
id | owner_id | recipient_id | content | created
1 | 1 | 2 | Hello | 2015-12-08 20:00
2 | 2 | 1 | Hey | 2015-12-08 20:10
3 | 3 | 1 | You there? | 2015-12-08 21:00
4 | 1 | 3 | Yes | 2015-12-08 21:15
5 | 4 | 1 | Hey buddy | 2015-12-08 22:00
假设我从用户 ID 1 的每个对话中查询最后一条消息,预期结果是:
id | owner_id | recipient_id | content | created
5 | 4 | 1 | Hey buddy | 2015-12-08 22:00
4 | 1 | 3 | Yes | 2015-12-08 21:15
2 | 2 | 1 | Hey | 2015-12-08 20:10
我尝试了很多组合,使用了 JOIN 和子查询,但没有一个给出预期的结果。
这是我尝试过的查询之一,但它不起作用。我相信它甚至不接近我需要的东西。
SELECT
IF ( owner_id = 1, recipient_id, owner_id ) AS Recipient,
(
SELECT
content
FROM
messages
WHERE
( owner_id = 1 AND recipient_id = Recipient )
OR
( owner_id = Recipient AND recipient_id = 1 )
ORDER BY
created DESC
LIMIT 1
)
FROM
messages
WHERE
owner_id = 1
OR
recipient_id = 1
GROUP BY
Recipient;
【问题讨论】:
-
你的表中是否有唯一键?
-
是的,我更新了问题(拼错了几个 ID)。
-
能否请您在问题中包含您尝试过的 SQL 查询?
-
对不起,太累了,无法给出正确的答案,但您基本上必须按对话的“其他用户”分组,这可以通过
case或if中的GROUP_BY语句来实现。在该组中选择 max(id) by,然后选择 where id in (group by query)。 -
那里,添加了我尝试过的查询之一@summea
标签: mysql sql database relational-database