![]() |
Datenbanken:
|
|
| |
| E-Mail: | |
|---|---|
| Homepage-URL: |
Bei Fragen zu diesem Beitrag bitte den Autor des Beitrags kontaktieren!
Viele Datenbankentwickler kennen das Problem mit der Sortierung. Mittels ORDER BY kann man zwar sortieren, aber keine eigene Reihenfolge vorgeben. Die Sortierung erfolgt immer alphabetisch und variiert sogar je nach Datenbanksystem. Ein klassisches Beispiel ist die Sortierung nach Wochentagen. Sortiert man die Liste der Wochentage, so erhält man die Folge: Dienstag, Donnerstag, Freitag, Mittwoch, Montag, Samstag, Sonntag. Dies ist natürlich in der Praxis nicht zu gebrauchen. Hat man in einer Tabellenspalte den Wochentag, so will man in aller Regel nach der natürlichen Reihenfolge der Wochentage sortieren und nicht alphabetisch nach ihren Namen. Mit Hilfe der Funktion FIELD() ist dies in MySQL ohne grossen Aufwand möglich. Das folgende Beispiel zeigt eine Tabelle und ein SQL-Statement, welches die Einträge aus dieser Tabelle nach Wochentagen sortiert.
<!--%%Datei:tabelle.txt%%--> +--------------------+ |Wochentag|Taetigkeit| +--------------------+ |Montag |labern | |Freitag |faulenzen | |Dienstag |essen | |Samstag |fernsehen | |... |... | +--------------------+ <!--%%Datei:sortiert.sql%%--> SELECT FIELD(Wochentag, 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag') AS index, Taetigkeit FROM tabelle ORDER BY index <!--%%Datei:ausgabe.txt%%--> +--------------------+ |index |Taetigkeit| +--------------------+ |1 |labern | |2 |essen | |5 |faulenzen | |6 |fernsehen | |... |... | +--------------------+
Die Tabelle tabelle enthält Tätigkeiten, die an bestimmten Wochentagen ausgeführt wurden. Diese sind in beliebiger Reihenfolge eingegeben worden. Möchte man nun eine Liste der Tätigkeiten, die nach Wochentagen sortiert ist, so bildet man mittels FIELD() einen Index, nach dem sortiert werden kann. Die Funktion benötigt einen Spaltennamen (oder auch einen Wert, aber das macht hier keinen Sinn) und eine Liste von Werten, die durch Kommata getrennt ist. Sie liefert für jeden Datensatz, der eine Entsprechung in der vorgegebenen Liste hat, den Index zurück. Nach diesen Indexnummern wird dann mit ORDER BY sortiert.
Diese Art der Sortierung kann natürlich nicht so schnell sein, wie eine normale Sortierung. In der Praxis hat sich die Methode aber sehr effektiv gezeigt und auch bei grösseren Tabellen und hohen Zugriffszahlen noch sehr schnell gearbeitet. FIELD() gibt den Wert 0 als Index zurück, wenn in der Liste keine Entsprechung des Spaltenwerts gefunden wurde. Damit könnten mit einer WHERE-Klausel ungültige Datensätze ausgefiltert werden oder ähnliches.
Die folgenden Stellen werden empfohlen, um das obige Beispiel besser zu verstehen, oder um weitere Möglichkeiten und Details zu erfahren.