我正在接管别人的项目,需要制定一个 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 看起来像他们已经进去了两次(两种方式)
无法理解所需的查询
看起来关系是双向的。也许这是一个错误,或者这个系统可以选择与某人成为朋友,而不是他们成为你的朋友。
假设后者,您只需要查看其中一列,因此您的查询可能如下所示:
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
用于测试的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