2016-03-19 13 views
2

aslında ben 2 tablo arkadaş tablo ve kullanıcı tablo ulaşmak için ne denemek için başka bir kullanıcının arkadaşını kontrol ederek ve bu karşılıklı arkadaşın verileri kullanıcı tablosundan veri alarak karşılıklı arkadaşım retreive etmektirKarşılıklı arkadaş sql bulma

masa arkadaşı daha sonra tablo veri sonra bu

1 | 1 | 2 | 1 
2 | 1 | 3 | 1 
3 | 2 | 3 | 1 
4 | 1 | 4 | 1 
5 | 2 | 4 | 1 

benziyor bu

id | user1 | user2 | friend_status 

gibi inşa ı t olduğumu diyelim olduğunu o kullanıcı kimliği 2, sonra bu masada 3 arkadaşım var - 1, 3 ve 4. Ne almak istiyorum Ne de 3 arkadaş - 2, 3 ve 4 var ve 1 ortak ortak 3 ve 4

+0

MySql'den mi bahsediyoruz? – xpy

cevap

0

:

SELECT UserAFriends.UserId FROM 
(
    SELECT User2 UserId FROM friends WHERE User1 = 1 
    UNION 
    SELECT User1 UserId FROM friends WHERE User2 = 1 
) AS UserAFriends 
JOIN 
(
    SELECT User2 UserId FROM friends WHERE User1 = 2 
    UNION 
    SELECT User1 UserId FROM friends WHERE User2 = 2 
) AS UserBFriends 
ON UserAFriends.UserId = UserBFriends.UserId 
: Eğer ortak arkadaşları alabilirsiniz UserId bu UNION iki farklı kullanıcılar ikisini birleştiren, Sonra

SELECT User2 UserId FROM friends WHERE User1 = 1 
    UNION 
SELECT User1 UserId FROM friends WHERE User2 = 1 

+0

teşekkürler xpy ama bu sorgudaki kullanıcı tablosundan karşılıklı arkadaş bilgisini nereden alabilirim? – Mireille28

+0

Bu sorgu, karşılıklı arkadaşların kimliklerini döndürür, bu sorgunun sonuçlarını 'users' tablonuza katılarak bilgileri getirebilirsiniz. – xpy

0

için masa kullanıcıları Bu gibi bir şeye ihtiyacınız var mı?

create table #table (id int, user1 int , user2 int, friend_status int) 

insert into #table values 

(1 , 1 , 2 , 1), 
(2 , 1 , 3 , 1), 
(3 , 2 , 3 , 1), 
(4 , 1 , 4 , 1), 
(5 , 2 , 4 , 1), 
(6 , 2 , 1 , 1), 
(7, 3 , 7 , 1) 

select *from #table 

select t1.user1, t1.user2 as friend 
from #table t1 
inner join 
#table t2 
on (t1.user2 = t2.user2 
and t1.user1 <> t2.user1) 
where t1.user1<>2 
order by t1.user1 
+0

Kullanıcı 1 ve kullanıcı 2'nin ortak arkadaşlarını istiyor – xpy

+0

sadece ortak arkadaşlar getiriyor – bmsqldev

+0

Bunu doğru şekilde alırsam, kullanıcı kimliği ve diğer tüm kullanıcılarla tüm karşılıklı arkadaşlarını getirir. – xpy

1

Burada kullanıcı 1 ve kullanıcı 2'nin tüm arkadaşlar birleştirmek union all kullanarak ve yalnızca her iki kullanıcılarla arkadaş olanlar seçmek için count(distinct src) > 1 kullanarak bir yoldur.

select friend from (
    select 2 src, user1 friend from friends where user2 = 2 
    union all select 2, user2 from friends where user1 = 2 
    union all select 1, user1 from friends where user2 = 1 
    union all select 1, user2 from friends where user1 = 1 
) t group by friend 
having count(distinct src) > 1 
Bir kullanıcıların arkadaş almak için bir UNION kullanabilirsiniz
İlgili konular