MySQL-Abfrage über zwei Tabellen und zwei Zeilen

bnc-bang

Grünschnabel
Hallo,

ich mache gerade meine ersten Schritte mit PHP und bin eben auf ein Problem gestoßen, für das ich bisher keine Lösung gefunden habe. Es geht um Folgendes: Ich möchte aus einer Tabelle 1 einige Daten auslesen und diese mit einer Tabelle 2 verbinden.

Tabelle 1 beinhaltet je eine ID in den Feldern: heim und auswärts
Tabelle 2 beinhaltet die dazugehörigen Namen und eben die passende ID in den Feldern: id, name

Die Abfrage soll nun ergeben, dass BEIDE Namen der jeweiligen ID zugeordnet werden und danach weiterverarbeitet werden können.

Für lediglich eine id mache ich das so:

PHP:
$sql = "SELECT t1.heim, t1.auswärts, t2.id, t2.name FROM matches t1, players t2 WHERE t1.heim = t2.id";

Für beide Bedingungen ist das so natürlich nicht möglich. Was sollte ich stattdessen nutzen? JOINs habe ich schon ausprobiert, allerdings führen auch die nicht zu dem gewünschten Ergebnis (wobei ich mir auch nicht sicher bin, ob ich sie richtig angewendet habe).

Danke im Voraus,

bncbang
 
Hallo.

Ich glaube da fehlt einfach nur ein "AS" bei der Tabellenzuordnung.

Probier mal:

PHP:
$sql = "SELECT t1.heim, t1.auswärts, t2.id, t2.name FROM matches AS t1, players AS t2 WHERE t1.heim = t2.id";
 
Die Abfrage funktioniert auch ohne AS, das ist ja auch nicht das Problem. Es geht um die zweite Zuweisung, die durch diese Abfrage nicht erreicht werden kann.
 
AS sollte benutzt werden, ist aber eigentlich optional. Führt aber meiner Meinung nach zu einer besseren Lesbarkeit.

SQL:
SELECT t1.heim, t1.auswaerts, t2.id, t2.name
FROM matches AS t1
LEFT JOIN players AS t2 ON t2.id = t1.heim

Probier es einmal so.
 
Das ist die gleiche Abfrage in anderer Form. Hier wird auch nur ein Name ausgegeben, nämlich der Name aus Tabelle 2, der die id der Zeile heim aus der Tabelle 1 hat. Es soll aber auch der zweite Name aus Tabelle 2 ausgelesen werden, der die id der Zeile auswärts in der Tabelle 1 hat.

Um es zu verdeutlichen:

Tabelle 1: heim = 1, auswärts = 2

Tabelle 2: id = 1, name = blabla und id = 2, name = blub

Nun soll für heim "blabla" angezeigt werden und für auswärts "blub".
 
Ich habe es nun über zwei Abfragen geregelt. Ist sicher nicht die optimalste Lösung, aber es funktioniert.

Danke an alle, die helfen wollten.
 
Das geht doch ganz einfahc in einer Abfrage...
SQL:
SELECT t1.heim, t1.auswaerts, t2.id, t2.name, t3.id, t3.name
FROM matches AS t1
LEFT JOIN players AS t2 ON t2.id = t1.heim 
LEFT JOIN players AS t3 ON t3.id = t1.auswaerts
 
Zurück