Werbung einblenden Werbung ausblenden


Home / Tutorials / mysql Handbuch / Sortieren von Datensätzen


Sortieren
Sortieren unter Berücksichtigung von Groß- und Kleinschreibung
Sortieren nach mehreren Kriterien
Sortieren unter Verwendung der Funktion substring_index

Sortieren

Sortieren von Datensätzen ist easy and straightforward. Es wurde hierzu das wesentliche schon in mysql basics gesagt. Wir verwenden zum Testen wieder die Tabelle testerone aus, die wir in dem Kapitel Daten aus einem Flatfile in Tabellen importieren generiert haben. Wer diese noch nicht generiert hat, der findet in jenem Kapitel eine Möglichkeit beschrieben, diese Tabelle ohne viel Tiparbeit zu generieren. Zur Erinnerung, sie hat folgendes Aussehen.

mysql> select Name,Ort,mail,Kategorie from testerone;
Name Ort mail Kategorie
Peter Müller Berlin mueller@wessnich.de business
Erika Kunstig München kunstig@yahoo.de business
Werner Sauerbier Freiburg sauerbier@gmx.de business
Maria Hopfendahl Berlin Hopf@hotmail.com consumer
Heiner Müller Bremen heiner@mueller.com consumer
Hans Kohl Düsseldorf hansiKohl@freenet.de consumer
Werner Glottertal Coburg wernerglott@wessnich.de consumer
Hans Lützelschwab Freiburg lützelschwab@freiburg.com business
Peter Brueg Freiburg peter-brueg@freenet.de consumer
Erika Lachfeld Freiburg erika_lachfeld@freiburg.net business

10 rows in set (0.06 sec)
mysql>

Wollen wir diesen Datensätze nach Namen sortieren, können wir so etwas machen.

mysql> select Name,mail from testerone order by Name;

Name mail
Erika Kunstig kunstig@yahoo.de
Erika Lachfeld erika_lachfeld@freiburg.net
Hans Kohl hansiKohl@freenet.de
Hans Lützelschwab lützelschwab@freiburg.com
Heiner Müller heiner@mueller.com
Maria Hopfendahl Hopf@hotmail.com
Peter Brueg peter-brueg@freenet.de
Peter Müller mueller@wessnich.de
Werner Glottertal wernerglott@wessnich.de
Werner Sauerbier sauerbier@gmx.de

10 rows in set (0.00 sec)
mysql>

Sortiert wurde als nach Namen und zwar in aufsteigender Reihenfolge. Will man absteigend sortieren muss man anstatt order by name, was eigentlich order by name asc bedeutet, order by desc schreiben. Ordnen lässt sich unabhängig vom Typ. Egal ob Zahl, irgendein Typ Datum, oder Zeichenkette, order by geht immer. Order by nimmt keine Rücksicht auf Gross - und Kleinschreibung. Nur wenn der Datentyp blob ist, wird Gross- und Kleinschreibung berücksichtigt. Wer Gross- und Kleinschreibung aber berücksichten will, muss etwas in der Art machen.

Sortieren unter Berücksichtigung von Groß- und Kleinschreibung

mysql> select Name,mail from testerone order by binary Name;

Sortieren nach mehreren Kriterien

Will man nach zwei Kriterien sortieren, gibt man diese zwei Kriterien einfach an.

mysql> select Name,mail,Ort from testerone order by Ort,Name;

Name mail Ort
Maria Hopfendahl Hopf@hotmail.com Berlin
Peter Müller mueller@wessnich.de Berlin
Heiner Müller heiner@mueller.com Bremen
Werner Glottertal wernerglott@wessnich.de Coburg
Hans Kohl hansiKohl@freenet.de Düsseldorf
Erika Lachfeld erika_lachfeld@freiburg.net Freiburg
Hans Lützelschwab lützelschwab@freiburg.com Freiburg
Peter Brueg peter-brueg@freenet.de Freiburg
Werner Sauerbier sauerbier@gmx.de Freiburg
Erika Kunstig kunstig@yahoo.de München

10 rows in set (0.00 sec)
mysql>

Sortieren unter Verwendung der Funktion substring_index

Manchen wird aber schon aufgefallen sein, dass die Sortierung hier völlig sinnlos ist, denn wer will schon nach dem Vornamen sortieren. Wollen wir nach dem Nachnamen sortieren, hätten wir entweder von vorneherein Name und Vorname in zwei Spalten halten müssen, oder sowas machen können.

mysql> select substring_index(name,' ',1) as 'Vorname',
-> substring_index(name,' ',-1) as 'Nachname',mail,Ort from testerone
-> order by substring_index(name,' ',-1);

Vorname Nachname mail Ort
Peter Brueg peter-brueg@freenet.de Freiburg
Werner Glottertal wernerglott@wessnich.de Coburg
Maria Hopfendahl Hopf@hotmail.com Berlin
Hans Kohl hansiKohl@freenet.de Düsseldorf
Erika Kunstig kunstig@yahoo.de München
Erika Lachfeld erika_lachfeld@freiburg.net Freiburg
Hans Lützelschwab lützelschwab@freiburg.com Freiburg
Peter Müller mueller@wessnich.de Berlin
Heiner Müller heiner@mueller.com Bremen
Werner Sauerbier sauerbier@gmx.de Freiburg

10 rows in set (0.00 sec)
mysql>

Die Funktion substring_index() wurde schon im Kapitel Suchen in Zeichenketten, Regular Expression et alter besprochen. Sie bekommt drei Parameter übergeben. Der Wert, auf den sie angesetzt wird, in der Regel also ein Spaltenname, der Zeichen, an dem aufgetrennt werden soll und schliesslich noch, wie oft dieses Zeichen aufgetreten sein muss. Eine negative Zahl bedeutet, dass von rechts gestartet wird und alles ausgelesen wird, was rechts der Fundstelle liegt. Eine positive Zahl heisst, dass von links gestartet wird, und alles ausgelesen wird, was links der Fundstelle liegt. Das Beispiel zeigt, das order by nicht nur mit Spaltennamen, sondern auch mit Funktionen verwendet werden kann.

vorhergehendes Kapitel