Hi!
Wenn man da Funktionen wie RAND() verwenden kann, warum sollte da ein IF() nicht gehen? Zumal ein gültiger Wert für das ORDER-BY-Argument ein Spaltenname, ein Ausdruck(!) oder eine Positionsnummer ist.
Da muss man aber ein wenig auf die MySQL Version achten.
Ich durfte Montag etwas auf einer MySQL 5.0.26 (die ursprüngliche Version auf einem SLES10) ausrollen, und da hatte ich Probleme mit
SELECT
irgendeinausdruck AS created -- Datentyp DATETIME
FROM blah
ORDER BY IFNULL(created, '2100-01-01 00:00:00') -- Q&D: die ohne created Zeitstempel nach hinten sortieren
Das war ein Fehler, wahrscheinlich der da: <http://bugs.mysql.com/bug.php?id=22457>, also im Zusammenhang mit Aliasnamen in Expressions. Prinzipiell sind ja Aliasnamen in der Order-By-Klausel möglich. Der Fehler wurde in [Version 5.0.32](http://dev.mysql.com/doc/refman/5.0/en/news-5-0-32.html) behoben (auf der verlinkten Seite nach "alias" suchen).
Lo!