-2

所有している映画のリストをアップロードできるアプリを作成しています。

私のデータベースはおそらく次の構造になります。

ユーザー

  • UserID - 一意の識別子
  • 名前 - ユーザーの氏名
  • メール - ユーザーのメール

映画

  • UserID - この映画を所有するユーザー
  • MovieID - 映画の一意の識別子 (現在 IMDB のコードを使用しています)

したがって、「Movie」は「User」と多対 1 の関係にあります。

私がやりたいことは、ランダムな「映画仲間」のユーザーを推薦することです。基本的には、同じ映画を所有している 2 人のユーザーを見つけて (そのため、2 人のユーザーのリストを一致させて一致する映画を見つけようとしています)、「ねえ、XYZ はダーク ナイト ライジングのファンです」のようなメッセージを彼に表示したいと考えています。同じように!"

一致は、既に見た提案の単純なフィルターを使用してランダムにする必要があります (ユーザーが同じバディと映画の両方に対して同じ提案を 2 回取得することは望ましくありませんが、別の映画で同じバディを提案しても問題ありません。どちらも 2 つの異なる映画を所有しています)。

MySQL を使用してこの種の一致を実行する方法がわかりません。より適切なデータベースがあれば、他の提案にもオープンです(グラフデータベースについて聞いたことがありますが、自分で使用したことはありません)

ありがとう。

4

1 に答える 1

1

同じ映画IDを持つユーザーを見つけるのは非常に簡単で、3つの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()

2つだけが必要な場合は、追加するだけですLIMIT 2

同じバディを2回取得しないようにするには、1つの質問の範囲を超えて、どのバディがすべて準備ができているかを追跡する必要があります。

于 2013-01-01T07:08:45.317 に答える