Hallo Thomas,
Hallo, ich möchte über mehrere Spalten sortieren und wollte erst einmal Wissen, ob dies überhaupt mit MySQL möglich ist.
das Sortieren nach mehreren Spalten ist eine elementare Aufgabe in SQL und wird von jedem mir bekannten SQL-Dialekt unterstützt, auch von MySQL.
> SELECT * FROM tabelle
> WHERE jahr1 LIKE 2006
> OR jahr2 LIKE 2006
> ORDER BY jahr1, mo1, tag1;
ist syntaktisch in Ordnung.
folgendes Beispiel:
+----+------+----+------+----+------+------+
ID | tag1 | mo1| jahr1|tag2| mo2 | jahr2|
+----+------+----+------+----+------+------+
1 | 4 | 1 | 2005 | 1 | 6 | 2006 |
2 | 5 | 3 | 2006 | 2 | 1 | 2004 |
3 | 2 | 2 | 2006 | 4 | 4 | 2006 |
4 | 5 | 5 | 2004 | 3 | 2 | 2006 |
+----+------+----+------+----+------+------+
an dieser Tabellenstruktur habe ich einiges auszusetzen. Sie ist verbesserungswürdig. Eine Grundregel für das Tabellendesign lautet, dass man stets den besten Datentyp für seine Spalten wählt. Du zeigst hier zwei Datumsangaben. MySQL unterstützt den Datentyp DATE, ideal für Datumsangaben. Statt sieben wären nur drei Spalten nötig.
Klar, um auf das Jahr zuzugreifen, musst Du dann bereits eine Datums- und Zeitfunktion verwenden, dies sollte dennoch nicht tragisch sein und in den wenigsten Fällen zu spürbaren Performanceverlusten führen.
Wie kann ich dann gleichzeitig nach dem zweiten Kriterium sortieren?
Was ist Dein zweites Kriterium? Schauen wir uns Deine Angaben an:
ich suche jetzt alle Datensätze mit dem Jahr 2006
als ergebnis erwarte ich also sortiert
ID 3 -> 2.2.2006 und 4.4.2006
ID 4 -> 3.2.2006
ID 2 -> 5.3.2006
ID 1 -> 1.6.2006
Grundsätzlich ist es Dir gleichgültig, welches Datum in das Jahr 2006 fällt. Du musst Dich somit entscheiden, welche der beiden Datumsangaben höhere Priorität besitzt, wenn beide Angaben in das Jahr 2006 fallen. Andererseits interessiert Dich zunächst nur das Datum, das im Jahr 2006 liegt, das sehe ich doch richtig. Gilt hierbei: Wenn zwei Angaben in das Jahr 2006 fallen, dann gilt der kleinere Wert?
Sicherlich ist dieser Archivthread für Dich interessant.
Freundliche Grüße
Vinzenz