簡體   English   中英

如何構造一個SQL查詢以獲取用戶之間的共同朋友數?

[英]How to structure a sql query to get number of mutual friends between users?

我正忙於創建一個查詢,該查詢返回用戶列表中用戶之間的共同朋友數。 我嘗試了一些,但是他們沒有按我希望的那樣工作,這是我嘗試過的查詢之一

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之間的共同朋友數量。

謝謝。

我認為這會有所幫助,請注意,這里我沒有使用“狀態”的條件,您可以根據需要修改此查詢。

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

這將返回共同朋友的數量。

根據您的數據,這將為用戶ID 1和4給出結果1,只有一個共同的朋友2。

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的共同朋友。

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,而他們之間沒有共同的朋友。

    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 

詢問是否有任何疑問;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM