MYSQL mehrfaches ORDER BY
Springer
- datenbank
Hallo zusammen,
ich bastel gerade an einer Art "Vertriebsdatenbank". In dieser habe ich ein Feld mit dem Datum der Wiedervorlage (Typ date, Name vorlage).
Wenn ich neue Daten in das Feld eintrage erhält das Feld vorlage den Wert 0000-00-00.
Nun zu eigentlichen Problem: Ich habe 3 Einträge in der Datenbank mit folgenden Werten
1. vorlage 2010-10-18
2. vorlage 2010-10-15
3. vorlage 0000-00-00
Ich möchte in meiner Abfrage/Ausgabe folgende Reihenfolge:
An erster Stelle die älteste vorlage (2010-10-15), dann (2010-10-18) und als letzes die 0000-00-00.
$query="SELECT * from tabelle WHERE NOW() >= vorlage && status = '0' ORDER BY vorlage DESC";
So bekomme ich leider nur (2010-10-18)-(2010-10-15)-(0000-00-00)=>logisch.
Wie kann ich dies lösen?
Danke für eure Hilfe.
Hi!
Ich möchte in meiner Abfrage/Ausgabe folgende Reihenfolge:
An erster Stelle die älteste vorlage (2010-10-15), dann (2010-10-18) und als letzes die 0000-00-00.
Dazu musst du ein weiteres Sortierkriterium vor die eigentlichen Werte stellen. Mit der IF()-Funktion kannst du das Null-Datum ermitteln und den Wert 1 zurückgaben lassen, anderenfalls eine 0. Jetzt sortierst du zunächst nach diesem Wert und anschließend nach dem eigentlichen Datum. Diesen IF()-Ausdruck kannst du direkt als erstes Sortierkriterium verwenden. Alternativ kannst du ihn auch als eine berechnete Spalte in der SELECT-Klausel einfügen, und die als erstes Sortierkriterium angeben (über ihre Nummer oder einen Alias). Mit der SELECT-Variante kannst du auch kontrollieren, ob der Ausdruck richtig arbeitet.
Lo!
Hi,
danke für die schnelle Antwort.
Leider verstehe ich nicht was du meinst.
Soll ich die Ausgabe erst sortieren?
Danke
Springer
Hi!
Leider verstehe ich nicht was du meinst.
Soll ich die Ausgabe erst sortieren?
Du hast die drei (Beispiel-)Daten
0000-00-00
2010-10-15
2010-10-18
Wenn du willst, dass 0000-00-00 größer ist als die anderen, dann stell eine 1 davor, und vor die anderen eine 0 (davorstellen => erstes Sortierkriterium). Damit ergibt sich die folgende Sortierung.
0 2010-10-15
0 2010-10-18
1 0000-00-00
0 ist kleiner als 1, also kommen diese Datensätze zuerst und anschließend die anderen. Als zweites Kriterium das Datum ergibt die gewünschte Reihenfolge innerhalb der 0er. Innerhalb der 1er ist es ja egal.
Lo!
Hallo,
"(davorstellen => erstes Sortierkriterium)" die Logik ist mir klar-leider die Praxis nicht. Weiss nicht wie ich das "vorstelllen" kann...
Hi!
"(davorstellen => erstes Sortierkriterium)" die Logik ist mir klar-leider die Praxis nicht. Weiss nicht wie ich das "vorstelllen" kann...
ORDER BY 1.Sortierkriterium, 2. Sortierkriterium
also sinngemäß
ORDER BY IF(datum = 0000-00-00, 1, 0), datum
Lo!
Diese Abfrage habe ich so noch nie gesehen.
Klappt aber (natürlich) wunderbar!
Vielen Dank.
Hallo!
Wie kann ich dies lösen?
Nutze Timestamps.
Gruß
Daniel