MySQL 查询相同兴趣

标签 mysql sql

我正在尝试查找我未关注但具有相同兴趣的用户发布的帖子。

我有这个表结构:

Posts - PostID, UserID, PostDate

Users - UserID, NAME

Followers - UserID, FollowerID

Interests - InterestID, InterestName

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) 用户兴趣(interestid、userid) 关注者(用户 ID、关注者 ID) 帖子(用户 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

关于MySQL 查询相同兴趣,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22881641/

相关文章:

java - QueryDsl - 根据键过滤 map

php - 如何做php网页和mysql数据库的审计日志?

mysql - 如何从此查询中删除结果?

mysql - 使用 MySQL 空间索引设计一个标准化数据库以获取 5 个最近邻

mysql - 使用什么类型的连接?

mysql - 我需要一些帮助来优化查询

php - 从两个不同的表中获取数据并将其插入到一个表中

php - 为 MySQL 解析一个大的 XML 文件

MySQL 引用同一个表的列更新表的记录

sql - 如何在存储过程的t-sql动态语句中使用LIKE?