我正在尝试查找我未关注但与之有共同兴趣的用户的帖子。
我有这个表结构:
帖子 - PostID,UserID,PostDate
用户 - UserID,NAME
关注者 - UserID,FollowerID
兴趣 - InterestID,兴趣名称
UserInterests - UserID,InterestID
我知道如何实现这一目标?
到目前为止我已经这样做了:
select * from posts p
inner join users u on u.idUsers = p.idUsers
where p.idusers <> 1
and p.idusers not in (
-- Gets the users whom I am Following
select users.idUsers
from users
inner join followers f on (f.idUsers=users.idUsers)
inner join users u on (u.idUsers=f.FollowerID)
where f.FollowerID = 1
)
答案 0 :(得分:0)
这与我最近根据“共同利益”(或其他帖子中的资源)回答的另一个问题非常类似。
首先,从您对这些兴趣的单一查询开始,并获得那些不是您的不同用户。然后得到那些你是追随者,并且用户不是你已经关注的人。
一旦有了这些,就可以通过用户ID轻松加入帖子
为了帮助优化此查询,您应该在表上使用以下索引
表索引 UserInterests(userid) UserInterests(interestid,userid) 粉丝(userid,followerid) 帖子(用户ID,后期)
此外,如果您想限制帖子,例如当前通过日期,您可能希望将其编入索引,以帮助您轻松将日期条件应用于最终JOIN到帖子表...加入帖子用户ID和postDate&gt; =某个日期值...
我尝试在表格之间的逻辑关系之间明确额外的换行符来突破该部分,以跟踪如何处理a-&gt; b-&gt; c
SELECT
P.*
from
( select distinct
OtherUser.userid
from
UserInterests Me
JOIN UserInterests OtherUser
ON UI1.InterestID = OtherUser.InterestID
AND NOT Me.UserID = OtherUser.UserID
LEFT JOIN Followers F
ON OtherUser.UserID = F.UserID
AND Me.UserID = F.FollowerID
where Me.UserID = MyUserID
AND F.UserID IS NULL ) as UsersNotFollowed
JOIN Posts P
ON UsersNotFollowed.UserID = P.UserID