[英]'friends of friends' SQL query
這個問題與前一個問題有關。 你可以在這里查看我的第一篇文章
我正在嘗試從用戶表中提取數據,我需要“朋友的朋友”,那些距離所選用戶只有兩步但沒有直接連接到所選用戶的人
我試過這個查詢:
select
u.*
from user u
inner join friend f
on u.user_id = f.friend_id
inner join friend ff
on f.user_id = ff.friend_id
where ff.user_id = {$user_id} AND u.user_id <> {$user_id};
我不知道如何拉動沒有直接連接到所選用戶的用戶。 我得到了當前用戶朋友的所有朋友,但我也得到了當前用戶的直接朋友。
你只需要排除那些直接的朋友以及成為朋友的朋友。 我重新安排了表別名,所以它更清楚(對我來說,無論如何)正在檢索的內容:
SELECT
u.*
FROM
user u
INNER JOIN friend ff ON u.user_id = ff.friend_id
INNER JOIN friend f ON ff.user_id = f.friend_id
WHERE
f.user_id = {$user_id}
AND ff.friend_id NOT IN
(SELECT friend_id FROM friend WHERE user_id = {$user_id})
它還消除了排除被查詢的用戶ID的需要。
你走在正確的軌道上。 您需要添加where條件,排除那些直接相關的條件:
select u.*
from user u
inner join friend f on u.user_id = f.friend_id
inner join friend ff on f.user_id = ff.friend_id
where ff.user_id = {$user_id} AND u.user_id <> {$user_id};
AND not exists
(select f2.friend_id
from friend f2
where f2.friend_id = ff.friend_id
and u.user_id = f2.user_id)
我添加到您的查詢中的extra not exists
子句驗證了二級朋友也不是一級朋友。
我使用一個非相關的子查詢,它檢索{$user_id}
的直接友誼的ID,並從最終結果中排除這些用戶:
select u.*
from user u
inner join friend f on u.user_id = f.friend_id
inner join friend ff on f.user_id = ff.friend_id
where ff.user_id = {$user_id} AND u.user_id <> {$user_id}
AND u.user_id not in (
select directFriend.friend_id
from friend directFriend
where directFriend.user_id = {$user_id})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.