【发布时间】:2015-02-10 00:56:49
【问题描述】:
我有一张桌子叫messages:
| id | from_id | to_id | text
+----+---------+-------+------------------
| 1 | 1 | 2 | from 1 to 2
| 2 | 2 | 1 | from 2 to 1
| 3 | 1 | 3 | from 1 to 3
| 4 | 3 | 1 | from 3 to 1
| 5 | 2 | 3 | from 2 to 3
| 6 | 1 | 2 | from 1 to 2 (2)
最简单的查询将检索用户作为参与者(发件人 - from_id 或收件人 - to_id)的每个对话的最后一条消息?
结果应该是:
| id | from_id | to_id | text
+----+---------+-------+------------------
| 4 | 3 | 1 | from 3 to 1
| 6 | 1 | 2 | from 1 to 2 (2)
这是我尝试过的:
SELECT * FROM `messages`
WHERE `id` IN (
SELECT MAX(`id`) FROM `messages`
WHERE `from_id` = 1 OR `to_id` = 1
GROUP BY `from_id`, `to_id`
)
它的问题在于,在用户既是发件人又是收件人的对话中,它会同时检索用户发送的最后一条消息和用户收到的最后一条消息。
【问题讨论】:
-
@EmanuilRusev 感谢您的编辑,它好多了。请不要觉得我在挑剔您。我只是想让您提出一个可以让其他用户更容易提供帮助的问题,它还可以让访问该网站的用户更好地了解您的问题是否有助于解决他们的问题。
-
对不起,我很困惑。你说你应该得到的数据(“结果应该是”)看起来像你说你不想得到的数据(“用户发送的最后一个问题和它收到的最后一个问题”)。跨度>
-
@EmanuilRusev 最新基于哪一栏 -
id?或者你有约会时间吗? -
@bluefeet 是的,它可以是基于
id的最新版本。 -
@MattEllen 问题是这些结果属于同一个对话。每个对话只能检索一条消息,并且应该是最后一条(
id最高的一条)。