|

Sortieren
Sortieren unter Berücksichtigung von Groß-
und Kleinschreibung
Sortieren nach mehreren
Kriterien
Sortieren unter Verwendung
der Funktion substring_index
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.
|
 |