sql >> データベース >  >> RDS >> Mysql

mysqlで友達リストを設定する

    友情関係が対称的である場合は、各ペアを別々のレコードに保存できます。

    friend1 friend2
    A       B
    B       A
    A       C
    B       D
    C       B
    D       B
    

    すべてのBをクエリします そのようなの友達:

    SELECT  friend2
    FROM    friends
    WHERE   friend1 = 'B'
    

    または、idが最小のユーザーを保存します 最初のフィールドと最大のidを持つフィールド 2番目のもの:

    friend1  friend2
    A        B
    A        C
    B        D
    

    Bをクエリします そのようなの友達:

    SELECT  friend1
    FROM    friends
    WHERE   friend2 = 'B'
    UNION ALL
    SELECT  friend2
    FROM    friends
    WHERE   friend1 = 'B'
    

    最初のオプションは、MySQLでもう少し効率的です 、そしてこれは、友情関係が対称的でない場合の唯一のオプションです(LiveJournalのように) )

    この記事を参照してください:



    1. SQLでリテラルテーブルを定義できますか?

    2. PostgreSQLに条件付き一意インデックスを追加する方法

    3. ネストされたセットでノードを移動する

    4. Instr()を使用してSQLiteの文字列内の文字の位置を取得する