0

I am taking over someone elses project and need to work out a php mysql query to figure out mutual friends from a friends table.

the table looks like the below - my id for example would be 1, the profile I am looking at has an id of 5

the output of the mutual friends id would be 3

rel 1 | rel 2
--------------
1     |    5
5     |    1
3     |    5
5     |    3
1     |    3
3     |    1

The id's look like they have gone in twice (both ways)

cant get my head round the query needed

4

2 に答える 2

0

関係は双方向のようです。おそらくこれはエラーであるか、このシステムには、誰かをあなたの友達に戻さずに友達になるオプションがあるのか​​もしれません.

後者の場合、列の 1 つだけを確認する必要があるため、クエリは次のようになります。

select
  rel2
from
  YourTable
where
  rel1 in (1, 5)
group by
  rel2
having
  count(*) > 1

カウントは明らかに、セット内に複数のフレンドがいるフレンド (1、5) のみを選択するためにあります。rel1 と rel2 の組み合わせは一意であると想定されます。

データが実際に正しくない場合は、このテーブルの 2 つのクエリでユニオンを使用してすべての組み合わせを選択することで、それを「解決」できます。ただし、この場合は、データを修正したほうがよいでしょう。データを修正する必要がある場合、クエリがすぐに読み取れなくなります (もちろん遅くなります)。

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フィドル

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 に答える