0

我正在接管别人的项目,需要制定一个 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 看起来像他们已经进去了两次(两种方式)

无法理解所需的查询

4

2 回答 2

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
于 2013-01-01T22:32:27.510 回答
-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
于 2013-01-01T22:38:26.990 回答