【发布时间】:2021-01-31 09:16:29
【问题描述】:
所以我正在为我的网站创建一个类似于 Facebook 风格的消息系统(我知道是对的)。我打算发生的是列出用户的所有对话,并返回对话中的最后一条消息。问题是我在进行 GROUP BY 时收到第一条消息。也许我用错了方法。
数据库的结构由三个表组成。 对话、conversations_assign、conversations_msg
conversations只是存储了对话的外部数据,重要的是id
conversations_assign 就是这样做的。它列出了对话中每个人的userid
conversations_msg 显然存储了消息,用户发布了其他数据。
一切都与 conversations.id = conv_id
联系在一起这是我的查询,正如我在上面用 GROUP BY 所说的,它返回第一个结果。取消 GROUP BY 并添加 LIMIT 1 从字面上返回一条消息,其余为空。任何帮助表示赞赏,谢谢!
SELECT conversations.id,
conversations_assign.num_unread,
message
FROM conversations_assign
INNER JOIN conversations ON conversations_assign.conv_id=conversations.id
LEFT JOIN (
SELECT conv_id, message, msg_time
FROM conversations_msg
GROUP BY conv_id
) AS message ON message.conv_id=conversations_assign.conv_id
WHERE conversations_assign.userid='XXsomeidXX'
ORDER BY message.msg_time DESC
【问题讨论】:
标签: mysql sql datetime max greatest-n-per-group