Hallo zusammen,
ich wollte mir (aus reinen Übungszwecken) eine Sporttabelle schreiben, in der die Ergebnisse der Fussball-Bundesliga eingetragen werden können.
Das ganze Ding wollte ich selbst auf die Beine stellen und hab´ dazu 3 Tabellen in MySQL geschrieben:
Code:
desc tmp_mannschaften;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(2) | NO | | | |
| verein | varchar(50) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
desc tmp_spieltag;
+----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| id | int(11) | NO | | | |
| spieltag | int(2) | YES | | NULL | |
| datum | date | YES | | NULL | |
+----------+---------+------+-----+---------+-------+
desc tmp_ergebnisse;
+-----------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| spieltag | int(2) | YES | | NULL | |
| heim | int(2) | YES | | NULL | |
| heim_tore | int(2) | YES | | NULL | |
| gast | int(2) | YES | | NULL | |
| gast_tore | int(2) | YES | | NULL | |
+-----------+---------+------+-----+---------+----------------+
Nun wollte ich so einfach wie möglich den query aufbauen und damit lediglich den Spieltag, das Datum, die Begegnung und das jeweilige Ergebnis abfragen.
Mit folgendem query funktioniert das auch:
Code:
SELECT
tag.spieltag,
tag.datum,
concat(heim.verein,' : ',auswaerts.verein) as Begegnung,
concat(erg.heim_tore,' : ',erg.gast_tore) as Ergebnis
FROM
tmp_ergebnisse as erg
LEFT JOIN
tmp_spieltag as tag on tag.spieltag=erg.spieltag
LEFT JOIN
tmp_mannschaften as auswaerts on auswaerts.id=erg.gast
LEFT JOIN
tmp_mannschaften as heim on heim.id=erg.heim
Ergebnis ist dann:
Code:
+----------+------------+-----------------------------------------+----------+
| spieltag | datum | Begegnung | Ergebnis |
+----------+------------+-----------------------------------------+----------+
| 1 | 2011-08-05 | Bayern München : Borussia Dortmund | 3 : 2 |
| 1 | 2011-08-05 | SV Werder Bremen : 1.FC Kaiserslautern | 0 : 2 |
| 2 | 2011-08-12 | Bayern München : SV Werder Bremen | 2 : 1 |
| 2 | 2011-08-12 | Borussia Dortmund : 1.FC Kaiserslautern | 0 : 1 |
| 3 | 2011-08-19 | Bayern München : 1.FC Kaiserslautern | 0 : 3 |
| 3 | 2011-08-19 | Borussia Dortmund : SV Werder Bremen | 2 : 2 |
+----------+------------+-----------------------------------------+----------+
Dazu hätte ich nun 2 Fragen.
1) Ist der Aufbau der Tabellen so ok oder sollte man dies anders lösen?
2) Wenn die Tabellen so in Ordnung sind, kann man den query sicher verbessern (ohne das zweite left join). Was schlagt ihr vor?