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

时间:2013-01-01 06:07:19

标签: mysql sql database pattern-matching

我正在编写一个应用程序,人们可以上传他们拥有的电影列表。

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

  

USER

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

MOVIE

     
      
  • UserID - 拥有此电影的用户
  •   
  • MovieID - 电影唯一标识符(我目前正在使用IMDB的代码)
  •   

所以“电影”与“用户”有多对一的关系

我想做的是推荐一个随机“电影伙伴”的用户。基本上,我想找到2个拥有相同电影的用户(所以我试图匹配2个用户的列表以找到匹配的电影)然后向他显示类似于的消息“嘿,XYZ是The的粉丝黑暗骑士也崛起!“

匹配应该是随机的,带有一个简单的过滤器,用于已经看过的建议(我不希望用户为同一个伙伴和电影两次获得相同的建议,但是可以建议他为不同的伙伴提供相同的伙伴电影 - 假设他们都拥有2部不同的电影。)

我不知道如何使用MySQL执行这种匹配。如果一个数据库更合适(我听说过图形数据库,但从未使用过我自己),我也对数据库的其他建议持开放态度。

感谢。

1 个答案:

答案 0 :(得分:1)

查找具有相同电影ID的用户非常简单,只需三个JOIN

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

获取随机用户,您只需添加ORDER BY RAND()

如果只想要两个,只需添加LIMIT 2

确保你没有获得相同的好友两次将要求你跟踪哪些好友已经准备就绪,这超出了单个问题的范围。