[MySQL] Zwei JOINS mit gleicher Tabelle

8yiKA3mbB86AVEDF

Grünschnabel
Hallo!

Ich arbeite gerade an einem Tourenbuch, welches unter anderem aus den Tabellen "bergtouren" und "orte" besteht. "bergtouren" sollen Bergtouren beinhalten und "orte" sollen einfach Orte sein (Startpunkte oder Zielpunkte, zB. Parkplatz, Gasthaus,...).
Die Tabelle "bergtouren" hat dazu neben diversen anderen Feldern zwei Felder "id_start" und "id_ziel". Die Tabelle "orte" hat die Felder "id", "name" und "hoehe". Da Start und Ziel durchaus der gleiche Ort sein kann und im übrigen jeder Ort Startpunkt mehrerer Touren, will ich aus der Tour eben nur mittels der jeweiligen id referenzieren und die tatsächlichen Orte nur in der Tabelle "orte" pflegen.

Wenn ich nun einen JOIN mache wie folgt, dann bekomme ich wunderbar die beiden Orte zurückgeliefert:
Code:
SELECT * FROM ( bergtouren b LEFT OUTER JOIN orte o ON b.id_start = o.id ) LEFT OUTER JOIN orte p ON b.id_ziel = p.id;
Das liefert:
Code:
+----+----------------------------+------------+-----------------------+----------+---------+------+------+---------+-----------+-----------+----------+---------+-------------+-------------+------------------+----+-------------------+-------+---------------+----+-------+-------+---------------+
| id | name                       | datum      | verzeichnisname       | aufstieg | abstieg | hmin | hmax | distanz | introtext | fulltext  | id_start | id_ziel | id_diffkond | id_difftech | id_gebirgsgruppe | id | name              | hoehe | id_bundesland | id | name  | hoehe | id_bundesland |
+----+----------------------------+------------+-----------------------+----------+---------+------+------+---------+-----------+-----------+----------+---------+-------------+-------------+------------------+----+-------------------+-------+---------------+----+-------+-------+---------------+
|  3 | Monte Cinto ?berschreitung | 2011-09-17 | 2011-09-17-montecinto |     1700 |    2000 | 1080 | 2706 |      17 | Introtext | Haupttext |        3 |       4 |          30 |          20 |                3 |  3 | Plateau de Stagnu |  1420 |            10 |  4 | Lozzi |  1060 |            10 | 
+----+----------------------------+------------+-----------------------+----------+---------+------+------+---------+-----------+-----------+----------+---------+-------------+-------------+------------------+----+-------------------+-------+---------------+----+-------+-------+---------------+
Soweit so gut. Mache ich diese Query nun mit PHP5 und möchte das Ergebnis in ein assoziatives Array schreiben, dann erhalte ich nur einen Namen und Höhe, da die zwei Ortsnamen- und Ortshöhenspalten ja logischer Weise gleich heissen.

Nun meine Fragen:

- Macht es überhaupt Sinn für Start und Ziel die gleiche Orte-Tabelle zu verwenden? Oder sollte ich diese in zwei unterschiedlichen Ortstabellen pflegen? Da hätte ich dann aber redundante Daten, oder?

- Gibt es eine andere Art von JOIN oder Query-Option, welche den Spaltennamen entsprechend unterscheiden bzw. anpassen kann?

- Gibt es eine Möglichkeit in PHP5 die Daten so auszulesen, dass ich die Spalten dann unterscheiden kann? Eine Idee wäre zwei SQL Queries, einmal mit Startort, einmal mit Zielort, was aber nicht sehr performant sein dürfte...

- Was wäre hier "best practice"?

- Liege ich vollkommen auf dem Holzweg?

Danke im Voraus für eure wertvolle Zeit!

lg
Thomas
 
Die gleiche Tabelle für Start- und Ziel-Ort macht Sinn.

Das * im SELECT mach so kein Sinn.

Du kannst mit Tabellenalias.* auch nur alles von einer Tabelle ausgeben und von den anderen gezielt Aliase setzen.
SQL:
SELECT
  b.*,
  o.name AS start_name,
  o.hoehe AS start_hoehe,
  o.id_bundesland AS start_id_bundesland,
  p.name AS ziel_name,
  p.hoehe AS ziel_hoehe,
  p.id_bundesland AS ziel_id_bundesland
FROM
 ...
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück