我正在接管别人的项目,需要找出一个php mysql查询来找出朋友桌上的共同朋友。
该表如下所示 - 例如我的id为1,我看的配置文件的id为5
共同朋友id的输出将为3
rel 1 | rel 2
--------------
1 | 5
5 | 1
3 | 5
5 | 3
1 | 3
3 | 1
id看起来已经两次(两种方式)
无法理解所需的查询
答案 0 :(得分:0)
看起来关系是双向的。也许这是一个错误,或者这个系统可以选择与某人成为朋友,而他们不是你的朋友。
假设后者,您只需查看其中一列,因此您的查询可能如下所示:
select
rel2
from
YourTable
where
rel1 in (1, 5)
group by
rel2
having
count(*) > 1
计数显然只能选择那些在集合中有多个朋友的朋友(1,5)。假设rel1和rel2的组合是唯一的。
如果数据确实不正确,您可以通过在此表上的两个查询上使用联合来“解决”,以选择所有组合。但是请注意,如果是这种情况,您最好修复数据,因为正如您所看到的,如果他们需要修复您的数据,您的查询将很快变得不可读(当然也会变慢)。
select
rel2
from
(select distinct
rel1, rel2
from
(select
rel1, rel2
from
YourTable
union all
select
rel2, rel1
from
YourTable) x ) y
where
rel1 in (1, 5)
group by
rel2
having
count(*) > 1
答案 1 :(得分:-1)
SQL Fiddle进行测试
select f.friend
from (select rel1, rel2 as friend
from friends
where rel1 in (1, 5)
union
select rel2, rel1
from friends
where rel2 in (1, 5)) f
group by f.friend
having count(*) > 1