2017-02-02 1 views
1

Ich versuche, eine gegenseitige Freunde-Abfrage zu erstellen. Aber ich bin mir nicht sicher, wie man zwei Tabellen zusammenführt, um das richtige Ergebnis zu erhalten.Gegenseitige Freunde Abfrage

Wenn also der Sitzungsbenutzer einen Freund mit seinem Freund hat, ist der gemeinsame Freund einer. Was ich suche, ist die beste Lösung, schnellste und kleinste Abfrage, um die Aufgabe zu erledigen.

Benutzertabelle

id | first | last | username 
---------------------------- 

Freunde Tisch

id | user 1_id | user2_id | status 
---------------------------------- 

Versuchte Abfrage

$collectmutualfriends = mysqli_query($mysqli," 
    SELECT 
       user.id, 
       user.first, 
       user.last, 
       user.username 
    FROM  user 
    LEFT JOIN friends as friends1 
      ON friends1.user1_id = user.id 
      AND friends1.user2_id = '$user2_id' 
      AND friends1.status = 2 

    LEFT JOIN friends as friends2 
      ON friends2.user2_id = user.id 
      AND friends2.user1_id = '$user2_id' 
      AND friends2.status = 2 

    GROUP BY friends2.user2_id 
    "); 
$nummutual = mysqli_num_rows($collectmutualfriends); 
if($nummutual==1){ 
    echo"<a href='mutualfriends.php?username=".$_GET['username']."'>".$nummutual." Mutual Friend<br></a>"; 
    }else if($nummutual>1){ 
    echo"<a href='mutualfriends.php?username=".$_GET['username']."'>".$nummutual." Mutual Friends<br></a>"; 
    } 

UPDATE

$user1_id = $_SESSION['id']; 
$user2_id = $data['id']; 

$ user1_id und $ user2_id können entweder in user1_id oder user2_id in der freunde-Tabelle sein, abhängig davon, wer zuerst die Freundschaftsanfrage gesendet hat.

+0

Können Sie einige Beispieldaten als auch schreiben? –

+0

Wenn 2 Benutzer Freunde sind, haben Sie 1 oder 2 Zeilen in der Tabelle Freund? –

+0

Was machen alle anderen? – Strawberry

Antwort

3

Dies sollte den Trick:

$sql = "SELECT u.* 
      FROM friends f1 
    INNER JOIN friends f2 ON (f2.user2_id = f1.user2_id) 
    INNER JOIN user u ON (u.id = f2.user2_id) 
     WHERE f1.user1_id = '$user1_id' 
      AND f2.user1_id = '$user2_id'"; 
+0

Genau wie meine Abfrage zeigt es keine Ergebnisse in allen Profilen. Der Sitzungsbenutzer kann sich in der freunde-Tabelle in der Zeile user1_id oder user2_id befinden, abhängig davon, wer die Freundschaftsanfrage gesendet hat. Macht das überhaupt etwas aus? – Gateway

+1

Ich sehe das als einen Fehler in Ihrem Design. Wenn Benutzer A und Benutzer B Freunde sind, gilt das Gegenteil auch, Benutzer B und Benutzer A sind ebenfalls Freunde. In diesem Fall können Sie einfach alle Freunde von Benutzer A oder alle Freunde von Benutzer B auswählen. Wenn Sie das tun, müssen Sie die Datenbank zweimal abfragen, indem Sie auf die Spalte user1_id und erneut auf die Spalte user2_id schauen. Mein Rat ist, zwei Reihen für jede Freundschaft zu speichern. –

+0

Also wenn ich in user1_id habe ich A, und user2_id ich habe b .. haben Sie eine andere Zeile mit user1_id als B und user2_id als A, ist das, was Sie sagen? – Gateway