按item id列出用户的所有消息,无论是发送者还是接收者

问题描述 投票:0回答:1

我想要像每个项目 id 发送者和接收者之间的所有消息这样的解决方案,并且需要所有行都属于用户,即如果发送者 id = 3 那么它将列出该用户 id 的所有消息,无论是属于项目 id 的发送者还是接收者中的用户。 `

我尝试了这个查询,但它也返回其他 id 消息,但我想要用户 id = 3 消息的所有行。

SELECT c1.id, c1.sender, c1.receiver, c1.message, c1.item_id, c1.created_at
FROM chats c1
INNER JOIN (
    SELECT item_id, MAX(id) AS max_id
    FROM chats
    WHERE sender = 3 OR receiver = 3
    GROUP BY item_id
) c2 ON c1.id = c2.max_id
ORDER BY c1.created_at DESC;

enter image description here

sql mysql join group-by subquery
1个回答
0
投票

问题在于您从用户参与的任何对话中选择最大 ID,而不仅仅是他们的消息。您需要另一个子查询来过滤这些消息。

WITH user_chats AS (
    SELECT *
    FROM chats
    WHERE 3 IN (sender, receiver)
)

SELECT c1.id, c1.sender, c1.receiver, c1.message, c1.item_id, c1.created_at
FROM user_chats c1
INNER JOIN (
    SELECT item_id, MAX(id) AS max_id
    FROM user_chats
    GROUP BY item_id
) c2 ON c1.id = c2.max_id
ORDER BY c1.created_at DESC;
© www.soinside.com 2019 - 2024. All rights reserved.