查找mysql查询的常见朋友

时间:2013-01-01 22:24:38

标签: php mysql

我正在接管别人的项目,需要找出一个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看起来已经两次(两种方式)

无法理解所需的查询

2 个答案:

答案 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