MySQL: Mehrere Kriterien nach "ORDER BY"
christian
- datenbank
Hallo,
ich starte mit PHP eine Datenbankabfrage. Die Datensätze will ich nach Zeitpunkt der Eintragung ordnen lassen. Dafür gibt es eine Spalte mit dem Typ 'datetime'. Aus verschiedenen Gründen ist es unumgänglich, dass manche Datensätze den Wert '0000-00-00 00:00:00' besitzen. Diese Datensätze werden beim Ordnen (per DESC) immer zuerst ausgegeben. Um hier eine zweite Ordnung reinzubringen habe ich folgendes angegeben:
ORDER BY 'zeit','id'
Das Problem ist jetzt, dass die Datensätze mit '0000-00-00 00:00:00' nun IMMER als erstes ausgeben werden, egal ob ich per DESC oder per ASC sortieren lasse, da anscheinend die Sortierung nach 'id' nicht zweitrangig behandelt wird.
Hier ein Beispiel:
...Order BY 'zeit','id' ASC
id| zeit
1 | 0000-00-00 00:00:00
2 | 0000-00-00 00:00:00
3 | 2009-01-01 10:00:00
...Order BY 'zeit','id' DESC
id| zeit
1 | 0000-00-00 00:00:00
2 | 0000-00-00 00:00:00
3 | 2009-01-01 10:00:00
Eigentlich müsste beim ersten Beispiel die Datensätze 1 und 2 als letztes Ausgegeben werden.
Wie löse ich das Problem?
christian
Hallo christian,
Order BY 'zeit','id' DESC
Du musst DESC pro ORDER- Feld angeben, also Order BY 'zeit' DESC,'id' DESC
SQL hat dir wie gewünscht (voreingestellt) die Zeit aufsteigend sortiert.
Kalle
Kann es sein, dass du _gültige_ Zeiten vorne haben willst, aber aufsteigend?
SELECT
...
,IF(zeit='0000-00-00 00:00:00', 1, 0) sort
...
ORDER BY sort, ...
Wenn die Zeit 00.. ist, wird ein Wert 1 gesetzt, sonst 0. Beim Sortieren kommen die 0er (gültige Zeit) vor den 1ern.
Kalle
SELECT
...
,IF(zeit='0000-00-00 00:00:00', 1, 0) sort
...
ORDER BY sort, ...Wenn die Zeit 00.. ist, wird ein Wert 1 gesetzt, sonst 0. Beim Sortieren kommen die 0er (gültige Zeit) vor den 1ern.
Wie muss die Abfrage dann genau aussehen?
SELECT * FROM tabelle
,IF(zeit='0000-00-00 00:00:00', 1, 0) sort Order BY sort
Das funktioniert irgendwie nicht...
SELECT * FROM
tabelle
,IF(zeit='0000-00-00 00:00:00', 1, 0) sort Order BY sort
Das funktioniert irgendwie nicht...
Ach so, es fehlt an Grundlagen. Das Feld sort gehört zum SELECT:
SELECT
*
,IF(zeit='0000-00-00 00:00:00', 1, 0) sort
FROM ...
WHERE ...
ORDER BY sort, zeit
yo,
...Order BY 'zeit','id' ASC
was sollen eigentlich die ' zeichen um die spaltennamen herum bewirken ?
Ilja