Teil von SELFHTML aktuell Teil von Artikel Teil von Datenbanken

Datenbanken:
Sortierfolgen in MySQL vorgeben

nach unten Achim Schrepfer
nach unten Hinweise zum Thema
nach unten Beispiel mit Erläuterungen
nach unten Weiterführende Links

Achim Schrepfer

E-Mail: E-Mail selfeature@speedesign.de
Homepage-URL: deutschsprachige Seite http://www.speedesign.de/

Bei Fragen zu diesem Beitrag bitte den Autor des Beitrags kontaktieren!

nach obennach unten

Hinweise zum Thema

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.

nach obennach unten

Beispiel mit Erläuterungen

Beispiel

<!--%%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 |
|...      |...       |
+--------------------+

Erläuterung:

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.

Beachten Sie:

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.

nach obennach unten

Weiterführende Links

Die folgenden Stellen werden empfohlen, um das obige Beispiel besser zu verstehen, oder um weitere Möglichkeiten und Details zu erfahren.

deutschsprachige Seite MySQL-Manual: Zeichenketten-Funktionen

Teil von SELFHTML aktuell Teil von Artikel Teil von Datenbanken

© 2007 bereichsübergreifende Seite Impressum