我正忙于创建一个查询,该查询返回用户列表中用户之间共同好友的数量。我试过一些,但它们并没有像我希望的那样工作,这是我尝试过的一个问题
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 4
和userid 1
之间的共同好友数量。
谢谢。
我认为这会有所帮助,请注意,这里我没有使用"status"的条件,您可以根据您的要求修改此查询。
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。
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
我对您的查询做了一个测试表,并制作了一个查询,显示两个朋友的id,而不是他们之间的共同朋友的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
询问是否有疑问;)
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的共同朋友。