Moin Christoph,
die Lösung von dedlfix war leider nur auf den ersten Blick ok. UNION verbietet die ORDER BY in den SELECT's, die vereinigt werden sollen. Ein:
(
SELECT termin, auftrErledigt
FROMtable
WHERE auftrErledigt = 0
ORDER BY termin ASC
)
UNION
(
SELECT termin, auftrErledigt
FROMtable
WHERE auftrErledigt = 1
ORDER BY termin DESC
)
> ist witzlos, da MySQL das ORDER BY automatisch herausoperiert (es sei denn, es wird in Verbindung mit einem LIMIT innerhalb der SELECT's verwendet).
Ich hab keine Ahnung, ob MySQL das unterstützt, ich hab gerad keine funktionierende MySQL-Installation hier, aber SQL erlaubt Prinzipiell sowas hier:
~~~sql
SELECT * FROM (
(SELECT termin, auftrErledigt
FROM `table`
WHERE auftrErledigt = 0
ORDER BY termin DESC)
UNION
(SELECT termin, auftrErledigt
FROM `table`
WHERE auftrErledigt = 1
ORDER BY termin ASC)
) AS auftraege;
Einen Versuch ist es wert. Prinzipiell würde ich aber auch eher den Ansatz von ChrisB wählen, allerdings in leicht anderer Form:
SELECT termin, auftrErledigt
FROM `table`
ORDER BY auftrErledigt,
CASE
WHEN auftrErledigt = 0 THEN termin
ELSE UNIX_TIMESTAMP(termin) * -1
END;
Das selektiert dir zuerst die Reihen mit auftrErledigt = 0 (oder 1, je nachdem ob DESC oder ASC) und danach sortiert es dir innerhalb der auftrErledigt-Sortierung nach termin aufsteigend oder termin absteigend. Halte ich für einfacher als die temporäre Tabelle.
LG,
CK