Problem mit JOINs (mySQL)

laZee

Grünschnabel
Hallo,

ich kann mein Problem schlecht allgemein beschreiben, also mal ein einfaches Beispiel:

Ich habe eine Tabelle "Nachrichten" und eine Tabelle "User". "Nachrichten" hat die Felder NachrichtenID, Nachricht, FromUserID, ToUserID. "User" hat die Felder UserID und Username.

Wenn ein Datensatz in "Nachrichten" abgelegt wird, wird im FromUserID die UserID des Users gespeichert der abschickt, die vom Empfänger in ToUserID. Soweit sogut.

Ich möchte jetzt gern mit einem mySQL query die Nachricht haben, sowie den Username des FromUser und des ToUser. Um der in der Nachrichten Tabelle vorhandenen UserID nen User zuzuordnen, JOINe ich die User Tabelle im query.

Allerdings gelingt es mir nur zu einer UserID (zb. der FromUserID) den Usernamen zu bekommen:

SQL:
SELECT n.Nachricht, u.Username FROM Nachrichten AS n LEFT JOIN User AS u ON n.FromUserID = u.UserID

Im Ergebnis wird jetzt der korrekte Username für den FromUser angezeigt. Problematisch ist nur, das ich ja jetzt noch nen Usernamen brauche, dessen ID in ToUserID steht. Ich hab einfach keinen Plan wie ich das Umsetzen kann, vielleicht kann mir jemand von euch helfen :( !

Danke im Vorraus,
laZee
 
Vielleicht so:

PHP:
SELECT n.Nachricht, u.Username
FROM Nachrichten AS n,
User AS u
WHERE n.FromUserId = u.id 
OR n.ToUserId = u.id
 
die or Version ginge zwar auch aber damit bekommt man nicht beide usernamen auf einen rutsch :-)

SELECT n.Nachricht, fu.Username, tu.Username FROM Nachrichten AS n LEFT JOIN User AS fu ON n.FromUserID = fu.UserID left join user as tu on n.ToUserID = tu.UserID
 
Original geschrieben von melmager

SELECT n.Nachricht, fu.Username, tu.Username FROM Nachrichten AS n LEFT JOIN User AS fu ON n.FromUserID = fu.UserID left join user as tu on n.ToUserID = tu.UserID

Klar, man kriegt schon beide Usernamen. In Deiner Variante ist aber der Vorteil, dass man gleich sieht, wer FromUser und wer ToUser ist. Allerdings würd ich dann noch ne kleine Änderung vornehmen, damit man dann auch wirklich was davon hat:

PHP:
SELECT n.Nachricht, fu.Username as FromUser, tu.Username as ToUser 
FROM Nachrichten 
AS n LEFT JOIN User AS fu ON n.FromUserID = fu.UserID 
LEFT JOIN  user AS tu ON  n.ToUserID = tu.UserID
 
Zurück