Mysql 匹配不同数据库列表中的相同项

Mysql 匹配不同数据库列表中的相同项,mysql,sql,database,pattern-matching,Mysql,Sql,Database,Pattern Matching,我正在写一个应用程序,人们可以上传自己的电影列表 我的数据库可能具有以下结构: 使用者 UserID-唯一标识符 名称-用户的全名 电子邮件-用户的电子邮件 电影 UserID-拥有此电影的用户 MovieID-电影唯一标识符(我目前正在使用IMDB的代码) 所以“电影”和“用户”有多对一的关系 我想做的是推荐一个随机“电影好友”的用户。基本上,我希望找到两个拥有同一部电影的用户(因此我尝试匹配2个用户的列表以找到匹配的电影),然后向他显示类似于“嘿,XYZ也是《黑暗骑士崛起》的粉丝!”

我正在写一个应用程序,人们可以上传自己的电影列表

我的数据库可能具有以下结构:

使用者

  • UserID-唯一标识符
  • 名称-用户的全名
  • 电子邮件-用户的电子邮件
电影

  • UserID-拥有此电影的用户
  • MovieID-电影唯一标识符(我目前正在使用IMDB的代码)
所以“电影”和“用户”有多对一的关系

我想做的是推荐一个随机“电影好友”的用户。基本上,我希望找到两个拥有同一部电影的用户(因此我尝试匹配2个用户的列表以找到匹配的电影),然后向他显示类似于“嘿,XYZ也是《黑暗骑士崛起》的粉丝!”

匹配应该是随机的,并对已经看到的建议进行简单筛选(我不希望用户对同一个好友和电影获得两次相同的建议,但可以为不同的电影向他推荐同一个好友-假设他们都拥有两部不同的电影)

我不知道如何使用MySQL执行这种匹配。如果数据库更合适的话,我也愿意接受其他关于数据库的建议(我听说过图形数据库,但我自己从未使用过)


谢谢。

查找具有相同电影ID的用户非常简单,只需三次连接即可

FROM
    User u
    INNER JOIN movie m
    ON u.UserID = m.UserID
    INNER JOIN moive BuddyMovie
    ON m.moiveID = BuddyMovie.MovieID
       and u.UserID <> Buddy.UserID --Don't want to be your own Buddy
    INNER JOIN User BuddyUser
    ON BuddyMovie.UserID = BuddyUser.UserID
WHERE
    u.UserID = 123  -- For a given user
    and m.MovieID = 345 -- Optionally For a given movie
来自
用户u
内接电影
在u.UserID=m.UserID上
内连接moive BuddyMovie
关于m.moiveID=BuddyMovie.MovieID
还有u.UserID Buddy.UserID——不想成为你自己的好友
内部连接用户BuddyUser
在BuddyMovie.UserID=BuddyUser.UserID上
哪里
u、 UserID=123——对于给定用户
m.MovieID=345——对于给定的电影是可选的
要获得随机用户,只需添加
orderbyrand()

如果您只需要两个,只需添加
限制2

要确保你不会两次得到同一个好友,你需要跟踪哪些好友已经准备好了,这超出了一个问题的范围