[英]SQL query for mutual friends
我的 MySQL 表結構是這樣的。
USER
uid
FRIENDS
fuid,fuid2,fapproved
對於每個朋友關系,我在 FRIENDS 中插入 2 條記錄。 如果用戶 1 是用戶 2 的朋友,則將下一行插入 FRIENDS
1,2,1
2,1,1
1,3,1
3,1,1
2,3,1
3,2,1
用戶 id 3 是用戶 id 1 和用戶 id 2 的朋友
如何在一個 sql 查詢中獲取用戶 ID 3?
給定兩個用戶@friend1 和@friend2,找出他們共同好友的所有用戶:
SELECT user.uid
FROM user
WHERE EXISTS(
SELECT TOP 1 1
FROM Friends
WHERE Friends.fuid = @friend1 AND Friends.fapproved = 1
AND Friends.fuid2 = User.uid
)
AND EXISTS(
SELECT TOP 1 1
FROM Friends
WHERE Friends.fuid = @friend2 AND Friends.fapproved = 1
AND Friends.fuid2 = User.uid
)
$query = "SELECT DISTINCT a.* FROM user a, visitor b, visitor c WHERE b.user_id = c.visitor_id AND b.visitor_id = a.user_id AND c.user_id = a.user_id AND b.user_id=65";
我嘗試過這個。 這是工作。
嘗試這個:
SELECT DISTINCT a.*
FROM user a, friends b, friends c
WHERE b.fuid = c.fuid2
AND b.fuid2 = a.uid
AND c.fuid = a.uid
AND b.fapproved = 1
AND c.fapproved = 1
測試腳本(在 MS SQL 中試過):
CREATE TABLE #USER
(
uid INT
)
INSERT #USER VALUES(1)
INSERT #USER VALUES(2)
INSERT #USER VALUES(3)
CREATE TABLE #FRIENDS
(
fuid INT,
fuid2 INT,
fapproved INT
)
INSERT #FRIENDS VALUES(1,2,1)
INSERT #FRIENDS VALUES(2,1,1)
INSERT #FRIENDS VALUES(1,3,1)
INSERT #FRIENDS VALUES(3,1,1)
INSERT #FRIENDS VALUES(2,3,1)
INSERT #FRIENDS VALUES(3,2,1)
SELECT DISTINCT a.*
FROM #user a, #friends b, #friends c
WHERE b.fuid = c.fuid2
AND b.fuid2 = a.uid
AND c.fuid = a.uid
AND b.fapproved = 1
AND c.fapproved = 1
IMO 在友誼表上找到自我加入的共同朋友更直觀
SELECT a.fuid2 FROM facebook_friendships AS b
ON a.fuid = :user_a AND b.fuid = :user_b AND a.fuid2 = b.fuid2
AND a.fapproved = 1 AND b.fapproved = 1
以下是英語的重要條件:
所以你基本上抓住了我上面列出的條件的所有行。 您可能會得到重復的結果,因此在 a.fuid2 周圍添加 DISTINCT 是個好主意。
我剛開始 MySQL 我遇到了這個問題。
personID friendID
6 10
6 2
6 3
8 1
8 2
8 3
/* query for friends */
select f.personID, p.personID, firstName, lastName
from person p
inner join friends f on f.friendID = p.personID
where f.personID = 6;
/* query for common friends */
select f1.personID 'personID 1', f2.personID 'personID 2', f1.friendID 'common friend'
from person p
inner join friends f1 on f1.friendID = p.personID
inner join friends f2 on f2.friendID = p.personID
where f1.personID = 6 and f2.personID = 8 and f1.friendID = f2.friendID;
結果:
personID 1 personID 2 common friend
6 8 2
6 8 3
雖然它不是您問題的直接解決方案,但您可以在此處建立解決方案。
$query = "SELECT f.fuid, f.fuid2 FROM FRIENDS f, USER u WHERE (f.fuid = u.uid or f.fuid2 = u.uid) AND (u.uid = ".$uid.";");
那是你在尋找什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.