我有 2 个表:“帖子” - 用于用户发布的帖子及其包含的所有信息。和“消息”——包括每个帖子的消息。表格如下所示:
帖子:
--------------------------------------------------
| post_id | post_creator_id | post_information |
--------------------------------------------------
消息:
----------------------------------------------------------
| message_id | post_id | user_id | message_text |
----------------------------------------------------------
我想向用户 (user_id) 显示他参与的所有聊天的列表,并按任何聊天中发送的最后一条消息对其进行排序。
所以有几件事要做:首先我需要按messages
表中的 post_id 分组(所以没有重复)并按message_id
DESC排序,我尝试了子查询和连接,但都没有奏效。这是我的子查询尝试的示例:
SELECT posts.post_information FROM posts WHERE posts.post_id in (SELECT
messages.post_id FROM messages ORDER BY message_id DESC)
无法弄清楚如何让查询只显示不同的行(没有重复的 post_id)以及 join 是否是更好的选择?
在查询中简单的变化,我们可以使用INNER JOIN
与messages
表和ORDER BY
用message_id
的,而不是使用suqbyery(看来你的想为了输出数据message_id
的descending
顺序。
SELECT posts.post_information
FROM posts
INNER JOIN (SELECT post_id, max(message_id) mid
FROM messages
GROUP BY post_id) mes ON mes.post_id = posts.post_id
ORDER BY mes.mid DESC
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句