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

lymnna71  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(331)

我有两个表:“posts”-用于用户发布的帖子及其包含的所有信息。以及“消息”-包括每个帖子的消息。表格如下所示:
帖子:

--------------------------------------------------
| post_id | post_creator_id  | post_information  |
--------------------------------------------------

信息:

----------------------------------------------------------
| message_id |  post_id | user_id |     message_text     |
----------------------------------------------------------

我想显示一个用户(user\ id)他正在进行的所有聊天的列表,并按任何聊天中发送的最后一条消息排序。
因此,有几件事要做:首先,我需要按中的post\u id分组 messages 表(这样就不会有重复项)和order by message_id 我尝试了子查询和联接,但都不起作用。下面是我的子查询尝试的示例:

SELECT posts.post_information FROM posts WHERE posts.post_id in (SELECT 
 messages.post_id FROM messages ORDER BY message_id DESC)

无法弄清楚如何使查询只显示不同的行(不重复post\u id)以及join是否是更好的选择?

erhoui1w

erhoui1w1#

假设每个帖子有多条消息,则需要使用 distinct 不包括重复项。不仅仅是连接表和添加 order by ```
SELECT distinct posts.post_information
FROM posts, messages where messages.post_id = posts.post_id
ORDER BY messages.message_id DESC

bjp0bcyl

bjp0bcyl2#

您的查询中的简单更改,我们可以使用 INNER JOINmessages 表和 ORDER BYmessage_id 而不是使用suqbyery(似乎您希望按 message_iddescending 命令。

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

相关问题