mysql - 按 SELECT 子查询的最后一行排序

标签 mysql sql

我有 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 JOINmessages 表结合使用,将 ORDER BYmessage_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/

相关文章:

mysql - 使用 MySQL 计算小时数

mysql - 使用更新和连接时未知列,即使该列存在

SQL - 从每个表中选择最大值,按所述最大值排序,然后按 created_at

mysql - 将另一个表导入数据库并添加字段

mysql group by on sum 列

mysql - 什么是MySQL网络压缩算法

mysql - 删除重复行,同时对另一行进行分组

java - HHH000342 : Could not obtain connection to query metadata : Access denied for user

MYSQL:如何在单个查询中获取最大日期和第二最大日期

mysql - 如何计算表中字符串值按行出现的次数