我有两张桌子:"帖子" - 用于发布用户的帖子及其包含的所有信息。和"消息" - 包括每个帖子的消息。 表格如下所示:
帖子:
--------------------------------------------------
| 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是否是更好的选择?
答案 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