ユーザーが何かを投稿すると、彼が投稿を参照した友人のIDを取得する小さなソーシャルネットワークを作成しています.今問題は、参照されるユーザーが1 or 10
. ここで、ユーザーがステータスを投稿し、6 人の友達を紹介したとします。
ここで、ステータスを投稿したユーザーと紹介された人の間で相互の友達を見つける必要があります。つまり、ステータスを投稿したユーザーには id が1
あり、紹介された人には2,3,4,5,6,7
.
したがって、クエリが行うことは、それ1 and 2
から7までの間の相互の友人を見つけることです。したがって、最後に、投稿したユーザーと参照された(またはタグ付けされた)人々の間の相互の友人を含む結果を取得します。いう)。1 and 3
1 and 4
私は2つのテーブルを持っていUser
ますFriends
User Table: Friends Table:
-------------------------- -----------------------------------
UserID Name friendsid friendname userid
-------------------------- -----------------------------------
1097517748 User1 3 friend1 536772587
100003052455644 User2 8 friend2 100003052455644
536772587 User3 8 friend3 1097517748
4 User4 3 friend4 100003052455644
これで、フレンド テーブルには、ユーザー テーブルに存在する、または存在しないさまざまな人物を含めることができます。この例では、ユーザー 2 と 3 は ID 8 の共通のフレンドを持ってい8
ます。 user テーブルも。これは userid 2 と 3 の間だけです。私はいくつかの userid を取得し、ステータスを投稿した人と紹介されたすべての友達の共通の友達を見つけました。
私はそれをクリアしたことを願っています.クエリのアイデアが得られたら、参照された友人の数が異なるため、phpを使用して動的に生成できます.
これまでのところ、このクエリを作成しました。
SELECT count(f1.friendsid) FROM friends AS f1
INNER JOIN friends AS f2 ON f1.friendsid = f2.friendsid
WHERE f1.userid = 100003052455644
AND f2.userid = 1097517748
しかし、これは2人のユーザー間の相互の友達を私にもたらすだけです.3番目の男を追加するとf3
、それを比較してf1
結果が得られず、このクエリの別の問題は、相互の友達IDが存在することを確認していないことです.ユーザーテーブルかどうか。3番目の男を追加した後。
SELECT count(f1.friendsid) FROM friends AS f1
INNER JOIN friends AS f2 ON f1.friendsid = f2.friendsid
INNER JOIN friends AS f3 ON f1.friendsid = f3.friendsid
WHERE f1.userid = 100003052455644
AND f2.userid = 1097517748
AND f3.userid = 536772587
このクエリでは結果が得られません。そのため、これらすべてを実行するクエリを作成したいと考えました。
編集:
実際に私は Facebook Connect を使用しており、ユーザーのログイン時にすべてのユーザーの友人をデータベースに保存します。ユーザー テーブルには、私の Web サイトに登録されているユーザーのみが含まれます。