我正在尝试开发一个功能,显示我的朋友的朋友,以及我有多少共同的朋友与这些用户。到目前为止,我已经能够单独完成这些功能,但不能一起完成。
这是我使用的名为userfriends的主视图。其中user1是第一个用户,user2是朋友。
这是我开发的功能,可以看到两个用户之间的共同朋友
SELECT id FROM users
WHERE id IN (
SELECT user2 FROM userfriends WHERE user1 = me
) AND id IN (
SELECT user2 FROM userfriends WHERE user1 = second
)
Users是一个主表,它可以将userfriends表中的用户id链接到有关该用户的信息。Me和second是存储过程中的变量,用于模拟对第一个和第二个用户的搜索。此功能按计划工作。
第二个功能是查看所有与我的朋友是朋友的用户,但不是与我的朋友。
SELECT user2 AS id
FROM userfriends
WHERE user1 IN (
#Selects my friends
SELECT user2 FROM userfriends
WHERE user1 = me
)
AND user2 <> me #Makes sure is not me
AND user2 NOT IN ( #Makes sure not already friend
SELECT user2 FROM userfriends
WHERE user1 = me
)
再次声明,all working to plan和me代表用户id。这将返回我所有朋友的列表。
我想得到的不是一个共同用户的列表,或者一个我朋友朋友的列表,而是:
一个包含我的好友好友用户ID和我和该用户共享的共同好友数的表。等等:用户:1,好友:103。如果我说得不够清楚,请你问我,我会尽量说清楚的。这两个函数是独立完成的,但我不知道如何将它们合并在一起。
最佳答案
-- use a self-join of userfriend*userfriend
-- to find all the friends that moi&toi have in common
-- , and count them.
-- (optionally) suppress the rows for (toi<=moi)
-- , because there are basically the same as the corresponding rows with
-- (toi>moi)
-- -----------------------------------
SELECT DISTINCT
uf1.user1 AS moi
, uf2.user1 AS toi
, COUNT(*) AS cnt
FROM userfriend uf1
JOIN userfriend uf2 ON uf1.user2 = uf2.user2
WHERE uf1.user1 < uf2.user1 -- Tie breaker, symmetry remover
GROUP BY uf1.user1, uf2.user1
;
关于mysql - 共同的 friend -MySQL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14019715/