答えは、彼らが友達テーブルで選択を行っていないということです。彼らは非正規化されたニュースイベントテーブルを使用している可能性が高いです。 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
友達に関連するすべてのイベントのニュースフィードを表示したい場合は、イニシエーターが友達のセットに含まれているすべてのイベントを選択するクエリを実行できます。
複雑さに応じて、サブセレクトを使用した実装は避けてください。拡張されません。