MySQL-Join Frage (2 Werte aus einer Spalte)

Jan_Peter

Grünschnabel
Moin, ich versuche gerade was in MySQL mit Joins zu realisieren (hab ich vorher noch nie verwendet), finde aber in den Tutorials keine Antwort auf das, was ich suche...

Also es geht quasi um 2 Tabellen, im Prinzip sind die so aufgebaut:
„orte“ - ID|name
„ortsnaehen“ - ID|ort1|ort2|distanz

In „orte“ stehen halt diverse Orte drin, in „ortsnaehen“ sind unter ort1 und ort2 die IDs von 2 verschiedenen Orten als Referenz auf die „orte“-Tabelle sowie die Entfernung zwischen den beiden in km gespeichert.
Nun will ich diese Ortsverknüpfungen ausgeben als ort1 – ort2 – Entfernung. Dabei sollen die Ortsnamen natürlich ausgeschrieben stehen, nicht die ID. Außerdem soll das ganze nach dem Namen von ort1 alphabetisch sortiert sein und da es manchmal mehrere Einträge mit identischem ort1 gibt, sekundär nach ort2 ebenfalls alphabetisch sortiert sein.
Meine Abfrage sieht folgendermaßen aus:
"SELECT ortsnaehen.*, orte.name FROM ortsnaehen LEFT JOIN orte ON ortsnaehen.ort1=orte.ID ORDER BY orte.name"
So kann ich jetzt nur nach ort1 sortieren (alphabetisch, nicht nur nach der ID) und auch den namen von ort1 ausgeben – aber von ort2 nicht. Und wie kann ich jetzt noch den namen von ort2 abfragen – das wäre ja wieder „orte.name“, deshalb weiß ich nicht, wie ich das als zweiten Join aufschreiben soll. Wisst Ihr, was ich meine, kann mir da jemand helfen?
Ist LEFT JOIN überhaupt das richtige? Kenne mich mit Joins wie gesagt nicht aus, habe bisher nur mit simpelsten MySQL-Queries gearbeitet...
Würde mich sehr freuen, vielen Dank für's lesen schonmal ;)
freundliche Grüße,
Jan Peter
 
Dann erkläre doch noch kurz wie du das gemacht hast und klicke auf "Erledigt" ;)
Damit sind wir alle glücklich.
 
Ok, mach ich ;)
SELECT ortsnaehen.distanz, orte_1.name AS ortsname1, orte_2.name AS ortsname2 FROM ortsnaehen INNER JOIN orte AS orte_1 ON ortsnaehen.ort1=orte_1.ID INNER JOIN orte AS orte_2 ON ortsnaehen.ort2=orte_2.ID ORDER BY ortsname1,ortsname2 ist meine Lösung. Hatte es vorher mit left join statt inner join, funktioniert irgendwie beides gleich, hab aber irgendwo aufgeschnappt, left join wäre von der Performance her nicht so gut...
Macht das Sinn?

(jetzt klick ich doch noch nicht auf erledigt :p )
 
Zurück