0

ユーザーが何かを投稿すると、彼が投稿を参照した友人のIDを取得する小さなソーシャルネットワークを作成しています.今問題は、参照されるユーザーが1 or 10. ここで、ユーザーがステータスを投稿し、6 人の友達を紹介したとします。

ここで、ステータスを投稿したユーザーと紹介された人の間で相互の友達を見つける必要があります。つまり、ステータスを投稿したユーザーには id が1あり、紹介された人には2,3,4,5,6,7.

したがって、クエリが行うことは、それ1 and 2から7までの間の相互の友人を見つけることです。したがって、最後に、投稿したユーザーと参照された(またはタグ付けされた)人々の間の相互の友人を含む結果を取得します。いう)。1 and 31 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 サイトに登録されているユーザーのみが含まれます。

4

1 に答える 1