2016-09-14 10 views
0

私は、ユーザーが特定のグループに参加できるウェブサイトを作成しています。今私は、各グループ内のユーザーのセットおよび/または各ユーザーが参加しているグループのセットを維持する必要があります。 MySqlは配列をサポートしていないので、グループ内のユーザーの配列(「グループ」テーブルのフィールドとして)やユーザーのグループの配列(「ユーザー」テーブルのフィールドとして) 。だから私はこれをどのように達成できますか?mysql - ウェブサイト内のグループのサブスクリプションリストを維持する

私の現在の解決策は、ユーザーIDとグループIDのフィールドを持つグループサブスクリプションのテーブルを維持することです。私は私が行うことができますこれら二つのリスト、

SELECT USERID FROM SUBSCRIPTIONS WHERE GROUPID=3 

または

SELECT GROUPID FROM SUBSCRIPTIONS WHERE USERID=4 

のいずれかを必要とするときにこれが私の希望リストを取得します。これを行うための最も効率的な/標準的な方法ですか、それとも良い方法がありますか?

答えて

1

あなたは大丈夫です。

は、通常は相対データベースのレコード間の関係の3種類があります: - 1(例えばuseruser.profile_id = profile.idを介して連結されたprofile

  • 1 -

    1. 一つの多くは(usermessagesmessage.user_id = user.idを介して結合している)
    2. 多数 - 多く

    あなたのケースはlasですそれは常に3番目のテーブルを介して動作します。私が正しくあなたの質問を理解していれば、それは標準的な方法です

    SELECT u.name, GROUP_CONCAT(s.name) as `subscriptions` 
    FROM users u 
    JOIN users_subscriptions us ON us.user_id = u.id 
    JOIN subscriptions s ON us.subscription_id = s.id 
    GROUP BY u.id 
    
  • +0

    ありがとう@Stalinko! – samurdhilbk

    1

    あなたのケースのために、彼らのサブスクリプションを持つすべてのユーザーを選択するにはusers_subscriptions (user_id, subscription_id)

    例クエリすることができます。

    ユーザテーブルとグループテーブルの間にあるピボットテーブルを作成し、その2つの関係を保存します。これは、多対多リレーションシップがリレーショナルデータベースに格納される方法です。あなたが正しく述べたように、グループのすべてのメンバーまたはメンバーのすべてのグループをそのように取得できます。

    関連する問題