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

时间:2018-04-27 11:00:25

标签: mysql sql

我有两张桌子:"帖子" - 用于发布用户的帖子及其包含的所有信息。和"消息" - 包括每个帖子的消息。 表格如下所示:

帖子:

--------------------------------------------------
| 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是否是更好的选择?

2 个答案:

答案 0 :(得分:0)

您的查询中的简单更改,我们可以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

答案 1 :(得分:0)

假设每个帖子有多封邮件,则需要使用distinct不包含重复邮件。不只是连接表并添加order by

SELECT distinct posts.post_information 
FROM posts, messages where messages.post_id = posts.post_id
ORDER BY messages.message_id DESC