我正在尝试获取给定用户跟随的所有用户创建的所有帖子。
表:帖子,用户,关注者
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
我不知道在一个查询中需要什么才能实现这一点。通常,我会获得用户关注的所有用户,然后遍历所有用户获取每个用户的帖子。使用此方法,我的结果首先按用户排序,然后按日期排序。我想按日期对所有帖子进行排序。
有什么建议吗?
答案 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个表格即可。加入users
到followers
,然后加入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表中。我也在解释你在问题中所说的内容,因为你只想按日期排序。