我有 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
按 降序
顺序对输出数据进行排序。
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
关于mysql - 按 SELECT 子查询的最后一行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50060992/