如何构建一个SQL查询来获取用户之间的共同朋友数量?

时间:2015-12-30 04:20:05

标签: php mysql sql-server mysqli

我正忙于尝试创建一个查询,该查询返回用户列表中用户之间的共同朋友数。我已经尝试了一些,但他们没有像我希望的那样工作,这是我试过的一个问题

query("SELECT * FROM userlist WHERE userid = '$userid' AND status ='friend' AND friendid != '$userid' ");

下面的sql表呈现用户之间的关系。

userid | friendid | type | status |
-----------------------------------
1      |2         | buddy | friend |
-----------------------------------
1      |3         | buddy | friend |
-----------------------------------
2      |3         | buddy | friend |
-----------------------------------
3      |2         | buddy | friend |
-----------------------------------
4      |2         | buddy | friend |
-----------------------------------
3      |1         | buddy | friend |
-----------------------------------
2      |4         | buddy | friend |
------------------------------------

如何构建查询以查找userid 4userid 1之间的共同朋友数量。

感谢。

4 个答案:

答案 0 :(得分:1)

我认为这会有所帮助,请注意,这里我没有使用“状态”条件,您可以根据您的要求修改此查询。

SELECT count(*) FROM userlist as a 
INNER JOIN  userlist as b 
ON(b.friendid=a.friendid and  b.userid=4 and b.friendid!=1)
WHERE a.userid=1 and b.friendid!=4

这将返回共同朋友的数量。

根据您的数据,这将给出结果1,对于用户ID 1和4,只有一个共同的朋友2.

答案 1 :(得分:0)

Select friendid
FROM userlist as F
WHERE userid = 1

Select friendid
FROM userlist as S
WHERE userid = 4

Select Distinct *
From F Join S
ON F.friendid = S.friendid

只会给你1和4的共同朋友。

答案 2 :(得分:0)

SELECT Distinct a.friendid as mutual_friend
FROM user_list AS a
JOIN user_list b ON a.friendid = b.friendid
WHERE (a.userid =1 or a.friendid=1)
AND (b.userid =2 or b.friendid=2) 

它会给你相互的朋友ID

答案 3 :(得分:0)

我根据您的查询制作了一个测试表,并编写了一个查询,显示两个朋友的ID,而不是他们之间的共同朋友。

    SELECT
    a.ID as Person1, b.ID as Person2, COUNT(a.FriendID) as NoOfMutualFriends 
    FROM
    Friends a INNER JOIN Friends b 
    ON a.FriendID = b.FriendID 
    WHERE a.ID <> b.ID     //other filters can be used here
    GROUP BY a.ID, b.ID 
    ORDER BY a.ID 

询问是否有疑问;)