如何在MySQL查询中显示类似转发的“重新发布”?

时间:2018-07-08 01:31:48

标签: mysql sql

我正在一个项目中,我的帖子可以重新发布为纯Twitter风格(转推)。帖子保存在表“ posts”(id,userid,标题,内容,日期)中,转发内容保存在另一个表“ reposts”(postid,userid,date)中。我需要显示按时间顺序并以降序排列的用户的帖子和转发。

到目前为止,我所能做的是显示两个表,但是转发显示的顺序与发布的创建日期有关,而不与转发的日期一致。如果我重新发布2年前的帖子,我希望现在显示该帖子(重新发布日期),而不是与2年前的帖子(发布日期)一起排序。

这是我的查询

SELECT * FROM (SELECT p.* FROM post AS p WHERE userid='$id' UNION SELECT p.* FROM post AS p WHERE p.id IN (SELECT postid FROM repost WHERE userid='$id')) a ORDER BY date DESC

1 个答案:

答案 0 :(得分:1)

加入repostsposts,然后从每个表中选择所需的列。

SELECT *
       FROM (SELECT p1.postid,
                    p1.userid,
                    p1.title,
                    p1.content,
                    p1.date
                    FROM posts p1
                    WHERE p1.userid = ?
             UNION ALL
             SELECT r1.postid,
                    r1.userid,
                    p2.title,
                    p2.content,
                    r1.date
                    FROM reposts r1
                         INNER JOIN posts p2
                                    ON p2.postid = r1.postid
                    WHERE r1.userid = ?) x
       ORDER BY x.date DESC;