MySQL查询相同的兴趣

时间:2014-04-05 13:39:58

标签: mysql sql

我正在尝试查找我未关注但与之有共同兴趣的用户的帖子。

我有这个表结构:

  

帖子 - 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
)

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