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

mysqlを使用してphpでFacebookのような友達システムを作成する方法

    ユーザー123の友達リスト:

    SELECT u.* FROM users u INNER JOIN friend_requests f ON f.user_id = u.id WHERE f.user_id = 123 AND status = 'accepted';
    

    ユーザー123はこれらのユーザーのファンです:

    SELECT u.* FROM users u INNER JOIN friend_requests f ON f.user_id = u.id WHERE f.friend_id = 123 AND status = 'waiting';
    

    ステータス列にインデックスを追加することを忘れないでください。

    また、このようなテーブルがこれに最適かどうかはわかりません。

    編集:

    私はおそらく次のようなスキーマを選択します:

    friend_request
        request_from (foreign key to users.user_id)
        request_to (foreign key to users.user_id)
        resolved (boolean 1 or 0, default is 0)
    
    friend_xref
        friend (foreign key to users.user_id)
        is_friend_with (foreign key to users_user_id)
    
    fan_xref
        user (foreign key to users.user_id)
        is_fan_of (foreign key to users.user_id)
    

    誰かが友達リクエストをしたとき、friend_requestテーブルに新しい行を追加します。リクエストの受信者が次のことを選択した場合:

    • リクエストを受け入れるには:friend_xrefに新しい行を追加し、friend_requestテーブルで解決済みを1に設定します
    • リクエストを拒否するには:fan_xrefに新しい行を追加し、friend_requestテーブルでresolvedを1に設定します

    ただし、最良の回答を得るには、mysql、database-design、または同様のタグでこれを確認することをお勧めします。



    1. MySQLのすべてのフィールドを置き換えます

    2. MySQLで丸めずに正確な10進値を取得する方法

    3. PHPの使用方法MySQLに挿入された単語ペア(文字列)配列をカウントします

    4. MacOSXにmysqlgemをインストールできません