質問に目を通しましたが、必要なことを正確に行うものは何も見つかりません。また、自分で行う方法もわかりません。
ユーザー テーブルとフレンド リンク テーブルの 2 つのテーブルがあります。user テーブルは、すべてのユーザーのテーブルです。
+---------+------------+---------+---------------+
| user_id | first_name | surname | email |
+---------+------------+---------+---------------+
1 joe bloggs joe@test.com
2 bill bloggs bill@test.com
3 john bloggs john@test.com
4 karl bloggs karl@test.com
私の友人リンク テーブルには、ユーザー間のすべての関係が表示されます。次に例を示します。
+--------=+---------+-----------+--------+
| link_id | user_id | friend_id | status |
+---------+---------+-----------+--------+
1 1 3 a
2 3 1 a
3 4 3 a
4 3 4 a
5 2 3 a
6 3 2 a
ステータス列の a は承認済みを意味することに注意してください。また、r (リクエスト) と d (拒否) がある場合もあります。
私がやりたいのは、ユーザーが検索を行うと、現在まだ友達になっていないユーザーのリストと、各ユーザーが何人の共通の友達を持っているかを返すクエリを作成することです。
現在、友達ではないすべてのユーザーのクエリを取得できました。したがって、検索を実行しているユーザーのユーザー ID が 1 の場合:
SELECT u.user_id,u.first_name,u.surname
FROM users u
LEFT JOIN friend_links fl
ON u.user_id = fl.user_id AND 1 IN (fl.friend_id)
WHERE fl.friend_id IS NULL
AND u.user_id != 1
AND surname LIKE 'bloggs'
それでは、返された各ユーザーの共通の友達の数をどのように数えますか?
編集:
私は私の質問で特に明確になっているとは思わないのと同じように編集します。
現在上記のクエリを実行すると、次の一連の結果が生成されます。
+---------+------------+---------+
| user_id | first_name | surname |
+---------+------------+---------+
2 bill bloggs
4 karl bloggs
これらは、現在 joe bloggs (ユーザー ID 1) と友達ではない姓の bloggs に一致するユーザーです。
次に、これらのユーザーのそれぞれが、検索を行っているユーザーと共通の友人を何人持っているかを知りたいので、返される結果は次のようになります。
+---------+------------+---------+--------+
| user_id | first_name | surname | mutual |
+---------+------------+---------+--------+
2 bill bloggs 1
4 karl bloggs 1
joe bloggs (ユーザー ID 1) は john bloggs の友達であり、john bloggs は両方の返されたユーザーの友達であるため、これらの返されたユーザーにはそれぞれ 1 人の共通の友達がいます。
これがもう少し明確であることを願っています。
ありがとう。