2016-03-19 10 views
2

eigentlich habe ich 2 Tabellen die Freundes-Tabelle und die Benutzer Tabelle was ich versuche zu erreichen ist mein gemeinsamer Freund rereive durch Überprüfung der Freund eines anderen Benutzers und die Daten dieser gemeinsamen Freund aus der Tabelle BenutzerSuche nach gemeinsamen Freund sql

Tabelle Freund ist wie dieser

id | user1 | user2 | friend_status 
bauen

dann die Tabellendaten wie folgt aussieht

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

dann lassen Sie uns sagen, dass ich t bin Der Benutzer mit der ID 2, dann in dieser Tabelle habe ich 3 Freunde - 1, 3 und 4. Was ich abrufen möchte, sind die gemeinsamen Freunde mit Benutzer 1, die auch 3 Freunde - 2, 3 und 4 haben und die Daten aus dem abrufen Tischbenutzer für die 2 gemeinsamen gemeinsamen Freunde 3 und 4

+0

Sprechen wir über MySql? – xpy

Antwort

0

Sie einen UNION können ein Benutzer Freunde zu bekommen:

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

Dann zwei dieser UNION für zwei verschiedene Benutzer auf UserId Verbinden Sie die gemeinsamen Freunde bekommen:

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 
+0

danke xpy, aber woher bekomme ich Informationen über gemeinsame Freunde aus der Tabelle users in dieser Abfrage? – Mireille28

+0

Diese Abfrage gibt die IDs der gemeinsamen Freunde zurück. Sie können die Informationen abrufen, indem Sie die Ergebnisse dieser Abfrage mit Ihrer Tabelle 'users' verknüpfen. – xpy

0

Sie brauchen so etwas?

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

Er möchte die gemeinsamen Freunde von Benutzer 1 und Benutzer 2 – xpy

+0

es ruft gemeinsame Freunde nur – bmsqldev

+0

Wenn ich das richtig bekomme, holt es alle gemeinsamen Freunde des Benutzers mit ID 2 und allen anderen Benutzern. – xpy

1

Hier ist eine Art und Weise union all mit allen Freunden von 1 Benutzer kombinieren und Benutzer 2 und mit count(distinct src) > 1 nur diejenigen auswählen, die Freunde mit beiden Benutzer sind.

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