根据item id过滤出用户的最新消息,无论是发送者还是接收者

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

我厌倦了通过使用 max 和 id 来对项目 id 进行分组,但无论用户作为发送者还是接收者登录,都无法仅过滤出表中每个项目 id 的单行以及最新消息。下面是我的发送者和接收者之间针对特定项目 ID 的聊天表

我想要像发送者和接收者之间的每个项目 ID 最后/最新消息这样的解决方案,并且只需要单行即可显示聊天列表。

我尝试了这个查询,但它只返回单行,但我想要用户有新消息的所有行。

SELECT id, 
发送者
, 
接收者
, 
消息
,  
created_at
FROM chats WHERE id IN (SELECT MAX(id)  FROM chats WHERE
发送者
=2 OR 
接收者
=2 GROUP BY IF (
发送者
=2, 
发送者
,
接收者
) ) ORDER BY 
created_at
 DESC;

预期结果=>

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

试试这个:

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 = 2 OR receiver = 2
    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.