SELECT对话的最后一条消息- MySQL

uqcuzwp8  于 2022-10-31  发布在  Mysql
关注(0)|答案(2)|浏览(151)

我有一个如下所示查询:

SELECT * FROM 
( SELECT DISTINCT CASE 
WHEN user1_id = 1 
THEN user2_id 
ELSE user1_id 
END userID,conversationId 
FROM conversations 
WHERE 1 IN (user2_id,user1_id))dt 
INNER JOIN users on dt.userID = users.id

它从users表中返回conversationId和用户信息。我还想根据conversationId从message表中添加最后一条消息(具有最大messageId的消息)。最后一件事是按messageId对所有结果进行排序
我尝试使用另一个INNER JOIN,它看起来像:

INNER JOIN message on dt.conversationId = message.conversationId

这是在结果中添加消息,但我只想得到最后一条消息(如前所述,messageId最大的那个)。我想我必须以某种方式实现MAX,但我不知道如何实现。同样的事情是按messageId对所有结果进行排序,因此messageId最大的结果将排在第一位。感谢所有的建议。

zour9fqk

zour9fqk1#

您可以在相关子查询中获取会话的最大messageId,并将其用于连接条件:

INNER JOIN message m
  on  m.conversationId = dt.conversationId
  and m.messageId = (
    SELECT MAX(m1.messageId)
    FROM message m1
    WHERE m1.conversationId = dt.conversationId
  )
a1o7rhls

a1o7rhls2#

因此,所有问题的解决方案都是以下查询

SELECT * FROM 
( SELECT DISTINCT 
CASE 
WHEN user1_id = 1 
THEN user2_id 
ELSE user1_id 
END userID,conversationId 
FROM conversations 
WHERE 1 IN (user2_id,user1_id))dt 
INNER JOIN users on dt.userID = users.id 
INNER JOIN message m on  m.conversationId = dt.conversationId and m.messageId = (SELECT MAX(m1.messageId) 
FROM message m1 WHERE m1.conversationId = dt.conversationId) 
ORDER by m.messageId DESC

相关问题