说明:
我有一个用户表如下
学生
id ------ name
1 ------ John
2 ------ Sarah
3 ------ Peter
和朋友表一样
伙伴
person1 ------ person2
1 ------ 2
2 ------ 3
现在我想要所有朋友和其他朋友的朋友不是我的朋友。
在"你可能知道的人"我们看到的人是我们朋友的朋友,但不是我们的朋友
我已成功编写查询以查找我的所有朋友,但我不知道如何找到朋友的朋友"在一个查询中
有没有办法在一个查询中执行....
我找到这样的朋友
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是friends表,$regno
是用户的id
答案 0 :(得分:1)
也许这个? 我仅使用您的示例数据对其进行了测试。
select name from students where id in (
select p2 from buddies where p1 in (
select p2 from buddies where p1=[serach_for_id]));
答案 1 :(得分:1)
加入两次以结交朋友的朋友:
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子句适用于第一个命名表,并且连接表从那里流出,这样可以获得最大的性能。
答案 2 :(得分:0)
试试这个
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位朋友。
如果它对您有用,我将以不同的格式重新编写它以使其更好
答案 3 :(得分:0)
我想这对你有用。
首先,我在两个第一个查询中选择你的朋友
然后我查询好友表(或本例中的朋友)他们是你朋友的朋友
它涵盖了所有情况:
/*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)