我已经在我正在构建的应用中合并了一个reblog系统,但我很难找到在同一个流中检索帖子和的帖子的逻辑。
我有一个post_reblog
数据透视表来存储post_id
和user_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)
答案 0 :(得分:0)
问题是所有的帖子都在查询中。当您使用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
不会删除重复的行。
另请注意,两个查询的不同之处在于“当前海报”是重新发布者。