MySQL查询相同的兴趣

MySQL查询相同的兴趣,mysql,sql,Mysql,Sql,我试图通过我不关注但有共同兴趣的用户来查找帖子 我有以下表格结构: Posts-PostID、UserID、PostDate 用户-用户ID,名称 Followers-UserID,FollowerID 兴趣-兴趣,兴趣名称 UserInterests-UserID,InterestID 你知道我怎样才能做到这一点吗 到目前为止,我已经做到了: select * from posts p inner join users u on u.idUsers = p.idUsers where p.i

我试图通过我不关注但有共同兴趣的用户来查找帖子

我有以下表格结构:

Posts-PostID、UserID、PostDate

用户-用户ID,名称

Followers-UserID,FollowerID

兴趣-兴趣,兴趣名称

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
)

这与我最近在另一篇文章中基于共同兴趣或资源回答的另一个问题非常相似

首先,从对您感兴趣的用户的单个查询开始,并得到那些不同于您的用户。然后得到那些你是跟随者,而用户不是你已经跟随的人的信息

一旦你有了这些,就可以通过用户ID简单地连接到帖子

为了帮助优化此查询,表上应该有以下索引

表索引 用户兴趣用户ID 用户兴趣,用户ID Followers用户ID,followerid 发布用户ID、发布日期

此外,如果您想限制帖子,例如通过日期限制当前帖子,您可能希望如上所述对其进行索引,以帮助轻松地将日期条件应用到帖子表的最终连接。。。在用户ID和postDate>=某个日期值上加入帖子

我试图在表之间的逻辑关系之间使用显式的额外换行符来拆分该部分,以了解a->b->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

考虑提供适当的DDL和/或SqLFIDLE连同期望的结果SETHOW你的当前查询有多大帮助你?它有什么作用?我想你是用户ID 1?我想你只需要修改你的子选择:如果这得到了你关注的用户,你只需要让它考虑到你和谁有共同的兴趣。