【发布时间】:2018-10-22 15:12:32
【问题描述】:
我想要的是找到与 user2 (id = 2) 关联的每个朋友,然后找到每个 user2 朋友和 user1 之间的共同朋友的数量。
mysql to find user2 Friends and get mutual_count of Friends with user1 ( with every user2 friend)
表用户
user_id | username
------------------
1 | user1
2 | user2
3 | user3
4 | user4
5 | user5
6 | user6
7 | user7
表友
user_one_id | user_two_id
------------------------
1 | 4
1 | 5
1 | 6
2 | 3
2 | 4
3 | 1
3 | 4
5 | 2
5 | 3
5 | 4
6 | 2
6 | 3
7 | 2
预期输出:user2的朋友//(朋友姓名,朋友id,当前朋友id和user1之间的朋友的相互计数(id = 1))
username | user_id | mutual_count
------------------------
user3 | 3 | 3 // user3 and user1 mutual -> (user4,user5,user6)
user4 | 4 | 2 // user4 and user1 mutual -> (user3 ,user5)
user5 | 5 | 2 // user5 and user1 mutual -> (user3 ,user4)
user6 | 6 | 1 // user6 and user1 mutual -> ( user3)
user7 | 7 | 0 // user7 and user1 mutual -> (0)
mysql语句
SELECT users.username,users.user_id,
(SELECT count(a.friendID) FROM
( SELECT user_two_id friendID FROM friends WHERE user_one_id =users.user_id
UNION
SELECT user_one_id friendID FROM friends WHERE user_two_id = users.user_id
) AS a
JOIN
( SELECT user_two_id friendID FROM friends WHERE user_one_id = 1
UNION
SELECT user_one_id friendID FROM friends WHERE user_two_id = 1
) AS b
ON a.friendID = b.friendID
) as mutual_count
FROM friends LEFT JOIN users
ON friends.user_one_id = users.user_id or friends.user_two_id = users.user_id
WHERE (friends.user_one_id = 2 OR friends.user_two_id = 2) AND users.user_id !=2
order by user_id
我得到的错误 'where 子句'中的未知列'users.user_id' 获取mutual_count 的问题子查询无法知道users.user_id
任何帮助表示赞赏
【问题讨论】:
-
您的问题不清楚且令人困惑。您想要
user1和所有其他用户之间的共同好友数量吗? -
我想要 user1 和 user2 朋友之间的相互数量
-
是的,问题似乎出在子查询中的
users.user_id.. -
as facebook 如果您以 user1 身份登录并转到 user2 朋友,您将显示 user1 和 user2 朋友之间的相互号码
-
是的,子查询中的 users.user_id .. 有问题
标签: mysql