ChrisB: MySQL - WHERE mit AS verwenden

Beitrag lesen

Hi,

SELECT termin, auftragErledigt
FROM tabelle
WHERE auftrErledigt = 0 AS erledigt, auftrErledigt = 1 AS unerledigt
ORDER BY unerledigt ASC, unerledigt DESC

Dass das so nicht funktioniert, ist klar.

Ja. Das liegt aber weniger am „WHERE mit AS“, wie du es im Titel nennst als viel mehr daran, dass du hier zwei mal nach dem selben Wert zu sortieren versuchst, in „entgegengesetzten“ Richtungen, und noch dazu dieser Wert für die Sortierung _innerhalb_ eines der beiden Bereiche gar keine Aussagekraft hat.

Das Problem:

  • die Sorte "unerledigt" (also 0) soll terminlich absteigend sortiert werden
  • die Sorte "erledigt" (also 1) soll terminlich aufsteigend sortiert werden
  • beide Sortierungen sollen in EINER Tabellenübersicht untereinander angezeigt werden, die unerledigten ob und die erledigten darunter.

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!)

MfG ChrisB

--
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?