选择给定用户遵循的所有用户创建的所有帖子

时间:2015-03-11 20:58:09

标签: mysql sql

我正在尝试获取给定用户跟随的所有用户创建的所有帖子。

表:帖子,用户,关注者

用户

id int(255)

与之相关:

关注

id int(255)
user_id int(255) //The id of person that's is following
following int(255) //The id of person being followed

还与之相关:

帖子

id int(255)
user_id(255) //The id of person who created the post

我不知道在一个查询中需要什么才能实现这一点。通常,我会获得用户关注的所有用户,然后遍历所有用户获取每个用户的帖子。使用此方法,我的结果首先按用户排序,然后按日期排序。我想按日期对所有帖子进行排序。

有什么建议吗?

4 个答案:

答案 0 :(得分:0)

简单的连接就足够了。 ?是'关注者'的用户ID所在的位置。去。

SELECT * FROM Posts p
INNER JOIN Followers f ON (f.following = p.user_id)
WHERE f.user_id = ?;

答案 1 :(得分:0)

要执行此查询,您只需加入多个表

    SELECT P.*
      FROM users     U
INNER JOIN followers F ON (F.user_id = U.id)
INNER JOIN users    FU ON (FU.id = F.following)
INNER JOIN posts     P ON(P.user_id = F.id)
     WHERE U.id = :id

答案 2 :(得分:0)

SELECT posts.id as post_id
FROM users
JOIN followers ON followers.user_id = users.id
JOIN posts ON posts.user_id = followers.following
WHERE users.user_id = ?

您只需要加入3个表格即可。加入usersfollowers,然后加入followers加入posts

答案 3 :(得分:0)

关注者表具有您正在查看的用户的ID,因此如果您只查看帖子,则无需专门加入用户表。 另外,请注意我已经使用派生表提前过滤结果,以便我们只从我们感兴趣的posts表中获取这些记录...如果我们在外部查询中过滤,我们必须从可能大的内容中获取所有内容表然后应用过滤器...即这是一种可以提高查询性能的方法。

select p.*
from 
    (select following from followers where user_id = @your_user) f
    inner join posts p
        on p.user_id = f.following
order by p.date

虽然您没有指定它,但我的查询假定日期列位于posts表中。我也在解释你在问题中所说的内容,因为你只想按日期排序。