我已经将reblog系统集成到正在构建的应用程序中,但是很难弄清楚在同一流中检索帖子和reblog的逻辑。

我有一个post_reblog数据透视表,用于存储post_iduser_id-重新发布该帖子的用户的ID。

以下查询检索帖子,但不检索重新发布的帖子-仅检索原始帖子。我不知道如何检索原始帖子和重新发布的帖子并在同一流中共享它们。

SELECT *
FROM posts
Where status = 'published'
OR id IN (SELECT * FROM (SELECT post_id FROM post_reblog ) AS subquery)


我的桌子

posts
    post_id (int)
    user_id (int)
    title   (varchar)
    body    (text)

post_reblog
    post_id (int)
    user_id (int)

最佳答案

问题是所有重新发布的帖子都在查询中。像这样使用OR时,每行只能显示一次。
一种可能的解决方案是联合:

SELECT post_id, user_id 'original poster', user_id 'current poster', title, body
FROM posts
WHERE status = 'published'
UNION ALL
SELECT p.post_id, p.user_id 'original poster', pr.user_id 'current poster', p.title, p.body
FROM post_reblog pr
INNER JOIN posts p ON p.post_id = pr.post_id
WHERE p.status = 'published'


注意,它是一个UNION ALL,因为UNION ALL不会删除重复的行。
另外,请注意,两个查询的不同之处在于“当前发布者”是重新发布者。

关于mysql - MySql Reblog/转推,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39379611/

10-09 00:35