我已经浏览了这些问题,但我找不到任何能完全满足我需要的东西,而且我自己也不知道该怎么做。
我有 2 个表,一个用户表和一个朋友链接表。用户表是我所有用户的表:
+---------+------------+---------+---------------+
| 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
这些是与姓氏 bloggs 匹配的用户,这些用户当前不是 joe bloggs 的朋友(用户 ID 1)。
然后,我希望每个用户与执行搜索的用户有多少共同朋友,因此返回的结果如下所示:
+---------+------------+---------+--------+
| user_id | first_name | surname | mutual |
+---------+------------+---------+--------+
2 bill bloggs 1
4 karl bloggs 1
这些返回的用户中的每一个都有 1 个共同的朋友,因为 joe bloggs(用户 ID 1)是 john bloggs 的朋友,而 john bloggs 是两个返回用户的朋友。
我希望这更清楚一点。
谢谢。