2016-04-02 12 views
0

Ich habe 2 Tabellen zu erhalten:Mysql mehrere Join-Tabelle zu Benutzerdaten

Tabelle - Benutzer

userId || username || profileImage 
------------------------------------ 
1  || aa  || aaaaa.png 

2  || bb  || bbbb.png 

3  || cc  || cccc.png 

4  || dd  || dddd.png 

Tabelle - Beziehung

relationshipId || user1 || user2 || status 
----------------------------------------------- 
1    || 1  || 2 || 0 

2    || 1  || 3 || 1 

3    || 1  || 4 || 1 

4    || 2  || 4 || 1 

Deshalb möchte ich die Details Alle Benutzer (3,4), für die 1 Anfrage und Status gesendet hat, werden als 1 akzeptiert.

Etwas, was ich versucht:

$stmt = $this->db->prepare(" 
SELECT users.uId 
    , users.username 
    , users.profilePic 
    from users 
    JOIN relationship 
WHERE (relationship.user_one_Id = :profileUserId || relationship.user_two_Id=:profileUserId) 
    AND relationship.statusCode=:statusCode 
    AND users.uId != :profileUserId 
LIMIT 6 
"); 

$stmt->bindvalue(":statusCode", 1); 
$stmt->bindparam(":profileUserId", $profileUserId); 
$stmt->execute(); 

Aber diese Abfrage gibt mir Reihen einschließlich derer, mit denen bin ich nicht zu Freunden. Also, wo bin ich falsch gelaufen?

+0

Was ist '$ profileUserId'? – RomanPerekhrest

+0

ist die ID des Profils, das ich betrachte .. welches mein eigenes Profil sein kann, jeder andere Benutzer ist im System. –

+0

Beachten Sie, dass LIMIT ohne ORDER BY ziemlich bedeutungslos ist – Strawberry

Antwort

0

Ich verstehe nicht, wo relationship.user_one_Id ins Bild kommt. Ich nehme an, Sie wollten schreiben relationship.user1? Ich nehme auch an, dass der Absender in user1 gespeichert ist. In diesem Fall ist Ihre Abfrage viel zu kompliziert:

SELECT t.uId, t.username, t.profilePic 
FROM users t 
INNER JOIN relationship r 
    ON (t.id = r.user2 
     AND r.user1 = :profileUserId 
     AND r.status = :statusCode 
    ) 
+0

Ja, der Benutzer1 ist die Benutzer-ID des Benutzers, der die Anfrage sendet, aber das heißt nicht, dass die Benutzer-ID dieses Benutzers in einer anderen Spalte gefunden werden kann, d. Das macht die Abfrage insgesamt komplex. –