Christoph: MySQL - WHERE mit AS verwenden

Beitrag lesen

Hallo Chris,

SELECT foo FROM bar ORDER BY UNIX_TIMESTAMP(datum) * IF(auftrErledigt = 0, 1, -1)

UNIX_TIMESTAMP sorgt dafür, dass das Datum ein Zahlwert ist, und die Multiplikation mit 1 oder -1 dafür, dass die Sortierung der Datensätze für die einen aufsteigend und für die anderen absteigend passiert.
(In der Theorie, nicht ausprobiert – und gerade zu faul darüber nachzudenken, in welcher Reihenfolge 1 und -1 angegeben werden müssen bzw. ob noch ein explizites ASC/DESC dahinter muss -> selber rausfinden!)

Ja, das kommt der Sache schon sehr nah, aber final ist das leider noch nicht. Was hieran die Krux ist, dass die "globale" Filterung über:
ORDER BY UNIX_TIMESTAMP(datum) * IF(auftrErledigt = 0, 1, -1) läuft, denn nach der Klammer muss noch die Sortierrichtung angegeben werden, nämlich entweder ASC oder DESC -> und DAS ist das Entscheidene!

MySQL sortiert wunderbar den Timestamp durch Multiplikation mit 1 oder -1, bildet dadurch die gewünschte Reihenfolge korrekt ab, nämlich dass die dringensten Termine ganz oben stehen. ABER durch das "globale" ASC stehen diese Termine ganz hinten in der tabellarischen Übersicht. Drehe ich ASC zu DESC stehen sie wieder zu Anfang aber die Reihenfolge der dringenden Termine kehrt auch wieder um.

Bevor ich mir jetzt einen Wolf teste, werde ich das ganze über Arrays lösen.

Vielen Dank für Deinen Denkanstoß.

Gruß
Christoph