我当前正在创建一个小型应用程序,用户可以在其中订阅不同的频道以查看相应的帖子。
现在,我正在尝试从帖子表(所有列)中获取所有信息,对于与特定用户可能已订阅的任何渠道相关的所有帖子。
示例:一个用户(id_user = 0)已订阅了三个渠道(id_channel = 1、2和3),现在希望查看这些渠道中的所有帖子(每个帖子中fk_channel = 1或2或3)。 / p>
我尝试使用不同的联接进行许多变体,但是我无法找到正确的查询。我最近的尝试之一看起来像这样(不起作用...):
SELECT * FROM posts
INNER JOIN channels ON posts.fk_channel = channels.id_channel
INNER JOIN subscriptions ON channels.id_channel = subscriptions.fk_subcribed_channel
INNER JOIN users ON subscriptions.fk_subscibed_by = users.id_user
答案 0 :(得分:1)
如果您具有用户ID,则无需联接表users
,因为您可以使用fk_subscibed_by
的列subscriptions
:
SELECT p.*
FROM subscriptions s
INNER JOIN channels c ON c.id_channel = s.fk_subcribed_channel
INNER JOIN posts p ON p.fk_channel = c.id_channel
WHERE s.fk_subscibed_by = 0
如果要获取联接表的所有列,请使用SELECT *
而不是SELECT p.*
,后者仅返回posts
中的列。
答案 1 :(得分:0)
如果您的介绍正确,那么应该可以正常工作:
SELECT * FROM posts
LEFT OUTER JOIN channel ON posts.fk_channel = channel.id_channel
LEFT OUTER subscriptions ON channel.id_channel = subscriptions.fk_subcribed_channel
LEFT OUTER users ON subscriptions.fk_subscibed_by = users.id_user
像这样,您应该能够从用户订阅的每个频道中获取每个帖子。