【问题标题】:Matching identical items in different database lists匹配不同数据库列表中的相同项目
【发布时间】:2013-01-01 06:07:18
【问题描述】:

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

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

用户

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

电影

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

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

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

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

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

谢谢。

【问题讨论】:

    标签: mysql sql database pattern-matching


    【解决方案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

    确保您没有得到相同的好友两次将要求您跟踪哪些好友都已准备好显示,这超出了单个问题的范围。

    【讨论】:

      猜你喜欢
      • 2014-01-05
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      相关资源
      最近更新 更多