【发布时间】:2012-10-26 15:59:37
【问题描述】:
我已经浏览了这些问题,但我找不到任何能完全满足我需要的东西,而且我自己也不知道该怎么做。
我有 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(request) 和 d(declined)。
我想要做的是有一个查询,如果用户进行搜索,它将返回一个他们目前还不是朋友的用户列表以及每个用户与他们有多少共同朋友。
我设法查询了所有当前不是他们朋友的用户。因此,如果进行搜索的用户的用户 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 是两个返回用户的朋友。
我希望这更清楚一点。
谢谢。
【问题讨论】:
标签: mysql