[MySQL] RowNum mit Sortierung

Drucken
( 6 Votes )
Hauptkategorie: Programmieren Kategorie: SQL
Erstellt am 27.12.2011 Zuletzt aktualisiert am 28.02.2012 Geschrieben von Jonny132
Leider gibt es in MySql von Haus aus keine RowNum wie in Oracle.
Über eine kleinen Workaround ist es jedoch möglich die Zeilen zu durchnummerieren.

Dazu erstellen wir die Variable rownum. Wie ihr unten sieht wird eine Variable mit dem @-Zeichen gesetzt.
1. Zeile: Wir erhöhen den Wert der Variable rownum um 1, somit bekommen wir eine Nummerierung der Zeilen. Zusätzlich lassen wir uns alle Spalten der Tabelle anzeigen.
3. Zeile: Hier erstellen wir sozusagen die Variable rownum und geben ihr den Startwert 0. Zusätzlich sagen wir, dass die weiteren Daten aus der Tabelle 'TabelleName' kommt.
MySql Nummerierung
1
2
3
SELECT @rownum := @rownum + 1 ROWNUM , TabellenName.* 
 FROM 
(SELECT @rownum := 0) r, TabellenName

Wenn ihr dies nun austestet seht ihr, dass alles schön durchnummeriert wird. Oftmals muss man jedoch die Daten zusätzlich sortieren und dabei kommet es zu einem Fehler da die Sortierung erst zu Schluss von MySql durchgeführt wird. Das heisst die Daten werden zuerst Nummeriert und erst danach Sortiert.

Um sortieren zu können und gleichzeitig eine Nummerierung zu setzten benötigen wir einen kleinen Workaround in dem wir einen Subselect machen.

MySql Nummerierung mit Sortierung
1
2
3
4
SELECT @rownum:= @rownum+1 ROWNUM, t.*
FROM 
(SELECT @rownum:=0) r,
(SELECT * FROM TabellenName ORDERBY ColumnName) t

Auf den ersten Blick ist nicht viel unterschied, jedoch bei genauerem betrachten sehen wir, dass in der 4. Zeile ein Innerselect steht in dem wir die Daten bereits Sortiert zurückbekommen. Diesen Daten geben wir den Alias 't' um ihn oben in der ersten Zeile ansprechen zu können. Da nun zuerst in einem SubSelect die Sortierung erledigt wird und erst danach die Nummerierung erfolgt ist die Ausgabe korrekt.

    Veröffentlichen Sie ihre Kommentare ...