Thomas: MySQL Sortierung über mehrere Spalten

Hallo, ich möchte über mehrere Spalten sortieren und wollte erst einmal Wissen, ob dies überhaupt mit MySQL möglich ist.

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 |
+----+------+----+------+----+------+------+

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

Der einfache Abfrage sieht ja so aus:

SELECT * FROM tabelle
WHERE jahr1 LIKE 2006
OR jahr2 LIKE 2006
ORDER BY jahr1, mo1, tag1;

Wie kann ich dann gleichzeitig nach dem zweiten Kriterium sortieren?

!!! Ich will keine PHP Sortierung am Ende der
Abfrage auf das Ergebnis Array durchführen, da
das sehr große Datenmengen sind und auch ich (leider) der
Physik unterliege. d.h. der Hauptspeicher ist begrennzt :-(

  1. 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