如何在MySQL中查找朋友的朋友



描述 :

我有一个用户表如下

学生

id ------ name     
1  ------ John    
2  ------ Sarah    
3  ------ Peter

和朋友表作为

朋友

person1 ------  person2    
1       ------  2
2       ------  3

现在我想要 2 的所有朋友和所有其他朋友,他们的朋友不是我的朋友。

例如,在"你可能认识的人"中,我们看到的人是我们朋友的朋友,但不是我们的朋友

我已经成功编写了查询以查找我所有的朋友,但我不确定如何在一个查询中找到"我朋友的朋友"

有没有办法在一个查询中做到这一点....

我正在寻找这样的朋友

 select * from `students` join `buddy_circle` on 
'$reg_no' = `person_1` and `stregno` = `person_2` or 
'$reg_no' = `person_2` and `stregno` = `person_1`

其中 Stregno 是学生的 ID,buddy_circle是朋友表,$regno是用户的 ID

也许是这个?我只用你的示例数据测试了它。

select name from students where id in (
    select p2 from buddies where p1 in (
        select p2 from buddies where p1=[serach_for_id]));

加入两次以获得朋友的朋友:

select distinct name
from buddy_circle a
join buddy_circle b on b.p1 = a.p2
join students on id = b.p2
where a.p1 = $reg_no

请注意,查询中表的顺序是这样的,where 子句适用于第一个命名表,联接表从该表流出,从而提供最大性能。

试试这个

select * from students As s join buddy_circle As b on s.id= b.person_2 or b.person_1 = s.id Where id =2

此查询应为您提供所有学生的列表,这些学生具有 2 个相同朋友。

如果它适合您,我会以不同的格式重写它以使其更好

我想这对你有用。
首先,我在两个第一个查询中选择您的朋友。
然后我查询好友表(或本例中的好友),他们是你朋友
的朋友它涵盖了所有情况:

/*select my friends in col2 while I'm in col1 */
SELECT p2 FROM Friends WHERE p1 = @MyID
UNION
/*select my friends in col1 while I'm in col 2 */
SELECT p1 FROM Friends WHERE P2 = @MyID
Union
/*
select my friend's friends which
my firends are in col1 and my firend's friends are in col2
*/
SELECT  p2 FROM Friends
WHERE
    p1 in (SELECT P2 FROM Friends where P1=@MyID)
union
SELECT p1 FROM Friends
WHERE
    p2 in (SELECT P2 FROM Friends where P1=@MyID)
union    
SELECT p1 FROM Friends
WHERE
    p2 in (SELECT P1 FROM Friends where P2=@MyID)
union
SELECT p2 FROM Friends
WHERE
    p1 in (SELECT P1 FROM Friends where P2=@MyID)

相关内容

  • 没有找到相关文章

最新更新