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

PHP / MySQLの友達の友達?

    答えは、彼らが友達テーブルで選択を行っていないということです。彼らは非正規化されたニュースイベントテーブルを使用している可能性が高いです。 DoInk.comにFacebookと同様のニュースフィードを実装しました。その方法は次のとおりです。

    タイプ、イニシエーター(ユーザーID)、およびターゲットユーザー(ユーザーID)を持つ「NewsEvent」の概念があります。 (イベントに関連する他のプロパティの列を追加したり、それらに参加したりすることもできます)

    ユーザーが別のユーザーのウォールに何かを投稿すると、次のようなイベントが生成されます:

    INSERT INTO events VALUES (wall_post_event, user1, user1)
    

    user1のプロファイルを表示するときは、user1がイニシエーターまたはターゲットのいずれかであるすべてのイベントを選択します。これがプロファイルフィードの表示方法です。 (プライバシーモデルに応じて、派手なイベントを取得して除外することができます。パフォーマンス上の理由から、メモリ内でこれを行うことを検討してください)

    例:

    SELECT * FROM events WHERE initiator = user1 or target = user1 //to see their profile feed
    
    SELECT * FROM events WHERE initiator IN (your set of friend ids) //to see your newsfeed
    

    友達に関連するすべてのイベントのニュースフィードを表示したい場合は、イニシエーターが友達のセットに含まれているすべてのイベントを選択するクエリを実行できます。

    複雑さに応じて、サブセレクトを使用した実装は避けてください。拡張されません。



    1. cPanelAPIを使用してMySQLデータベースを作成する方法

    2. Codeigniter db-> update()VS MySQLネイティブUPDATE影響を受ける行:0

    3. 結合基準またはより効率的なwhere句のSQLフィルター基準

    4. 初心者と中級者のための10のMySQLデータベースインタビューの質問