我有两个表:“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是否是更好的选择?
2条答案
按热度按时间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
bjp0bcyl2#
您的查询中的简单更改,我们可以使用
INNER JOIN
与messages
表和ORDER BY
与message_id
而不是使用suqbyery(似乎您希望按message_id
在descending
命令。