SQL zweimal die gleiche Spalte mit JOIN

  • Ersteller Ersteller dagobert50gold
  • Erstellt am Erstellt am
D

dagobert50gold

Gast
Guten Tag, ich habe folgendes Problem:

Ich habe zwei Tabellen, zum Beispiel:

sorten
Code:
sortenid | gemuese
       1 | Tomate
       2 | Gurke
       3 | Rucola
       4 | Bohne
       5 | Kartoffel
lieblingssorten
Code:
id | name     | a | b
 1 | Anton    | 3 | 4
 2 | Caroline | 1 | 3
 4 | Max      | 4 | 5
 5 | Tom      | 5 | 2
Nun soll in etwa das hier erscheinen:

[TABLE="width: 500"]
[TR]
[TD]Anton[/TD]
[TD]Rucola[/TD]
[TD]Bohne[/TD]
[/TR]
[TR]
[TD]Caroline[/TD]
[TD]Tomate[/TD]
[TD]Rucola[/TD]
[/TR]
[TR]
[TD]Max[/TD]
[TD]Bohne[/TD]
[TD]Kartoffel[/TD]
[/TR]
[TR]
[TD]Tom[/TD]
[TD]Kartoffel[/TD]
[TD]Gurke[/TD]
[/TR]
[/TABLE]

Das versuche ich über diesen Code auszulesen:
PHP:
$holgemuese = mysql_query("SELECT * FROM lieblingssorten INNER JOIN sorten AS sorte1 ON lieblingssorten.a=sorte1.sortenid INNER JOIN sorten AS sorte2 ON lieblingssorten.b=sorte2.sortenid");
if(!$holgemuese){
    die('Abfrage ungültig: ' . mysql_error());
}


while ($line = mysql_fetch_array($holgemuese, MYSQL_ASSOC)){
    echo "<tr><td>" . $line['name'] . "</td><td>". $line['gemuese'] . "</td><td>". $line['gemuese'] . "</td></tr>";
}

mysql_free_result($holgemuese);

Leider kommt dann das hier raus:

[TABLE="width: 500"]
[TR]
[TD]Anton[/TD]
[TD]Bohne[/TD]
[TD]Bohne[/TD]
[/TR]
[TR]
[TD]Caroline[/TD]
[TD]Rucola[/TD]
[TD]Rucola[/TD]
[/TR]
[TR]
[TD]Max[/TD]
[TD]Kartoffel[/TD]
[TD]Kartoffel[/TD]
[/TR]
[TR]
[TD]Tom[/TD]
[TD]Gurke[/TD]
[TD]Gurke[/TD]
[/TR]
[/TABLE]

Wie bekomme ich es hin, dass beide Gemüsesorten erscheinen, ohne, dass ich eine zweite Spalte "gemuese" mit den gleichen Daten erstellen muss?

Vielen Dank schonmal!
 
Du musst die 'gemuese'-Spalte in beiden Tabellen jeweils unterschiedlich benennen:

Code:
SELECT ls.name, s1.gemuese AS gemuese1, s2.gemuese AS gemuese2
FROM lieblingssorten ls
INNER JOIN sorten s1 ON ls.a = s1.sortenid
INNER JOIN sorten s2 ON ls.b = s2.sortenid

Ungetestet, weil sqlFiddle gerade down zu sein scheint :D
 
Oder so:

SELECT lieblingssorten.name, sorten.gemuese, sorten_1.gemuese
FROM sorten AS sorten_1
INNER JOIN (sorten INNER JOIN lieblingssorten ON sorten.sortenid = lieblingssorten.a) ON sorten_1.sortenid = lieblingssorten.b

gemuese.jpg

Edit: Ergebnis
result.jpg
 
Zuletzt bearbeitet:
Stimmt. Wenn das nicht der Fall ist, dann müsste LEFT JOIN statt INNER JOIN benutzt werden.
 
Bei der Lösung von ygbr versuche ich dann das mit
echo "<tr><td>" . $line['name'] . "</td><td>". $line['sorten.gemuese'] . "</td><td>". $line['sorten1_gemuese'] . "</td></tr>"
auszulesen ... dann bekomme ich aber undefined index in der Zeile mit obige, Code :(

achso ... ich hab da in der Tabelle noch mehr Info stehen, deshalb verwende ich zwischen SELECT und FROM ein * ... kann es daran liegen?
 
Zuletzt bearbeitet:
dagobert50gold schrieb:
dann bekomme ich aber undefined index in der Zeile mit obige, Code

Zurecht. "sorten1_gemuese" und "sorten.gemuese" sind kein Index. "gemuese" wäre eher richtig, aber dann auch doppelt vorhanden. Nimm den Code von NullPointer, dann ist dein Index "gemuese1" und "gemuese2".
 
Aber bei NullPointers Code kann ich kein * setzen sondern muss jede Spalte einzeln auswählen, oder? Die Tabelle ist nämlich umfangreicher als oben dargestellt. Geht das nicht einfacher? Oder kann ich auch Stern und das mit AS setzen?
 
Zurück
Oben