簡體   English   中英

'朋友的朋友'的SQL查詢

[英]'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.

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