我厌倦了通过使用 max 和 id 来对项目 id 进行分组,但无论用户作为发送者还是接收者登录,都无法仅过滤出表中每个项目 id 的单行以及最新消息。下面是我的发送者和接收者之间针对特定项目 ID 的聊天表
我想要像发送者和接收者之间的每个项目 ID 最后/最新消息这样的解决方案,并且只需要单行即可显示聊天列表。
我尝试了这个查询,但它只返回单行,但我想要用户有新消息的所有行。
SELECT id,
发送者,
接收者,
消息,
created_atFROM chats WHERE id IN (SELECT MAX(id) FROM chats WHERE
发送者=2 OR
接收者=2 GROUP BY IF (
发送者=2,
发送者,
接收者) ) ORDER BY
created_at DESC;
预期结果=>
试试这个:
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;