Wenn man in PHP und MySQL arbeitet und ein Query ausführen möchte, mit dem man eine Fallunterscheidung machen und dabei je nach Verwendung nach einem bestimmten Feld sortieren will, kann man in der SQL-Sprache die CASE Anweisung nutzen. Wird die Bedingung in der WHEN Klausel erfüllt, so wird der angegebene Spaltenname zum Sortieren verwendet. Trifft die Bedingung nicht zu, so wird in der ELSE Klausel ein zweiter, alternativer Name einer Spalte angegeben. Die Struktur stellt im Grunde bedingte Anweisungen wie sie es mit IF / ELSE der Fall sind dar.
Hier ein Beispiel, wie man bedingt nach mehreren Spalten sortieren kann:
mysql_query("SELECT Tabellenfeld FROM Tabellenname
ORDER BY (CASE WHEN Feld_1 != 0 THEN Feld_1 ELSE Feld_2 END) DESC");
Eine andere Möglichkeit ist es auch, einen neuen Alias im SELECT Block zu definieren. Im ORDER BY Block kann nur noch der Alias eingesetzt werden. Das Ergebnis und somit die Ausgabe bleibt dieselbe. Jeder kann also auswählen, was er für sich besser findet und einsetzen möchte. Ein Codebeispiel würde dann so aussehen:
mysql_query("SELECT Tabellenfeld, (CASE WHEN Feld_1 != 0 THEN Feld_1 ELSE Feld_2 END) AS ordername
FROM Tabellenname ORDER BY ordername DESC");
Zuletzt sollte noch erwähnt werden, dass mehrere WHEN Klauseln hintereinander folgen können. Dies würde in unserem Fall der bedingten Anweisung ELSEIF nahekommen. Für die Programmlogik heißt es für uns: Es werden zuerst alle WHEN Bedingungen abgefragt. Trifft keine davon zu, dann wird in den ELSE Zweig gesprungen. Hier ein Codeschnipsel für viele WHEN Klauseln hintereinander:
mysql_query("SELECT Tabellenfeld,
(CASE WHEN Feld_1 != 0 THEN Feld_1 WHEN Feld_2 != 0 THEN Feld_2 ELSE Feld_3 END) AS ordername
FROM Tabellenname ORDER BY ordername DESC");