Hi Klaus,
sorry für die späte Antwort, hatte gestern Nachmittag eine Besprechung.
Zitat:
P.S. Nachfrage: wenn ich statt SELECT * die Felder angebe, ist dann die Reihenfolge der Angabe im SELECT gleichbedeutend mit der Ausgabe, d.h., kann ich so schon eine "Sortierung" vornehmen?
|
Je nachdem, was Du mit "Sortierung" meinst lautet die Antwort "ja" bzw. "nein" ;-)
Meinst Du eine Sortierung im Sinne von, z.B., einer alphabetischen Ausgabe der Vereinsnamen lautet die Antwort ganz klar NEIN. Hier mußt Du das SQL- Statement um ein ORDER BY (eventuell in Verbindung mit GROUP BY, wenn Du z.B. alle Spiele von Manschaft A als erstes, dann die Spiele von Mannschaft B als zweites ausgeben willst) ergänzen.
Meinst Du eine Sortierung im Sinne von "ich möchte zuerst den Mannschaftsnamen, dann den Ortsnamen und dann den Trainernamen bekommen" lautet die Antwort JA.
Je nachdem, wie Du die Ergebnisse des SELECTs in php- Variablen überführst ist dies relevant bzw. egal. Bei Deiner Methode mit mysql_fetch_array() ist dies egal, bei der von mir meistens angewandten Methode mit mysql_fetch_row() ist dies sehr wichtig.
Zu Deinem Problem: Wenn ich es richtig gesehen habe gibst Du zweimal die gleiche Ortsbezeichnung aus.
Ansonsten sieht der Code für die Ausgabe korrekt aus.
Bzgl. Deiner Tabelle table3 (bei mir: spiele) würde ich Dir empfehlen, diese folgendermaßen zu ändern:
spielid (primary key, autoincrement)
mannsch1 (id der ersten Mannschaft)
mannsch2 (id der zweiten Mannschaft)
klassenid (Spielklasse)
spielortid (kann, muß aber nicht gefüllt sein, wenn Spielort = Heimatort der ersten Mannschaft)
spieldatum (und Uhrzeit)
resultat (oder aufgeteilt auf torem1,torem2 (Tore der Mannschaft 1,..))
table4 (klassen) enthält die Spielklassen
table5 (vereine) die Vereinsnamen, verknüpft mit table4 über die klassenid, mit table6 über die ortsid
table6 (orte) enthält die Ortsnamen
So, wie Du es mit zwei Orts-ids gemacht hast kommst Du nur dann an die zweite Mannschaft, wenn es in deren Ort nur genau einen Verein gibt.
SELECT v1.vereinsname,o1.ortsname,v2.vereinsname,o2.ortsname,03.ortsname AS spielort,k.spielklasse,...
FROM vereine AS v1 INNER JOIN orte AS o1 ON v1.ortsid = o1.ortsid // Mannschaft 1 mit Heimatort
INNER JOIN spiele AS s1 ON v1.vereinsid = s1.mannsch1
INNER JOIN orte AS o3 ON s1.spielortid = o3.ortsid // Spielort
INNER JOIN vereine AS v2 ON s1.mannsch2 = v2.vereinsid // jetzt bekomme ich die gegnerische Mannschaft
INNER JOIN orte AS o2 ON v2.ortsid = o2.ortsid // Heimatort der zweiten Mannschaft
INNER JOIN klassen AS k ON s1.klassenid = k.klassenid
WHERE spieldatum = [was auch immer]
AND k.spielklasse LIKE 'kreisklasse a'
AND ...
HTH,
Andy
P.S.: Benenne Deine Tabellen immer dem Inhalt entsprechend. Generische Tabellennamen wie table1 etc. sind immer schwer zu handeln, wenn es an die SQLs geht.