我正在接管某人elses項目,並需要制定一個php mysql查詢來找出朋友表中的共同朋友。Mysql查詢找到共同的朋友
表看起來像下面 - 我的例如ID是1,我在看的軌跡具有5
一個id的共同的朋友ID的輸出將是3
rel 1 | rel 2
--------------
1 | 5
5 | 1
3 | 5
5 | 3
1 | 3
3 | 1
編號的樣子,就像他們在兩次(雙向)漲
不能讓我的頭一輪需要
我正在接管某人elses項目,並需要制定一個php mysql查詢來找出朋友表中的共同朋友。Mysql查詢找到共同的朋友
表看起來像下面 - 我的例如ID是1,我在看的軌跡具有5
一個id的共同的朋友ID的輸出將是3
rel 1 | rel 2
--------------
1 | 5
5 | 1
3 | 5
5 | 3
1 | 3
3 | 1
編號的樣子,就像他們在兩次(雙向)漲
不能讓我的頭一輪需要
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
它看起來像的關係是雙向查詢。也許這是一個錯誤,或者也許這個系統可以選擇與某人成爲朋友,而沒有他們成爲你的朋友。
假設是後者,你只需要看看其中一列,讓您的查詢看起來是這樣的:
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 1和5的每一件事,然後用PHP來弄明白? –
這可以幫助你:http://stackoverflow.com/questions/8906154/mysql-select-mutual-friends – Nathan