Fortlaufende Nummer/Zahlen in einer MySQL Abfrage erzeugen

21. Oktober 2010  |  Kommentar schreiben   |  Tags: , ,



Bei Facebook teilen

Fortlaufende Nummer in Dokumenten werden oft gebraucht, insbesondere in Buchhaltungsunterlagen, wo strengente fortlaufende Zahlen benötigt werden und keine IDs. Die IDs sind zwar in der Regel nie gleich, jedoch um Fremdschlüsselkonflikte zu vermeiden, werden sie nur einmal vergeben und wenn eine ID dazwischen wegspringt, so wird die freie Position nicht mehr belegt. Deswegen benötigen wir eine eindeutige Durchnummerierung, die von eins bis zur Anzahl der Zeilen in der MySQL Abfrage weitergeht.

Fortlaufende Nummer in MySQL Abfragen werden vor allem gebraucht wenn wir keine Möglichkeit haben die Daten zu manipulieren, nachdem die Abfrage ausgeführt wird, zum Beispiel bei einem universellen CSV Export. Dieser Artikel beschäftigt sich mit der Programmierung und Anpassung von einer MySQL Abfrage, die unabhängig von der Struktur eine zusätzliche Spalte für die fortlaufenden Nummer enthält.

MySQL Abfrage – fortlaufende Nummer automatisch erzeugen lassen

Gegeben ist eine MySQL Tabelle mit gemischten IDs (Spaltenname ist “id”) und einen Inhalt, den wir durchnummerieren lassen wollen:

SELECT
COUNT(tabelle2.id)+1 as Position,
tabelle1.sText as Inhalt
FROM MeineTabelle as tabelle1 LEFT JOIN MeineTabelle as tabelle2
ON tabelle1.id>tabelle2.id
GROUP BY tabelle.id
ORDER BY t1.id ASC

Was genau macht diese MySQL Abfrage zur Generierung von fortlaufenden Nummern?

  1. Die Tabelle wird mit sich selbst verknüpft, bei der Bedingung, dass beim Überprüfen jeder Zeile vom Join, der Abstand des gerade betrachteten IDs zu der ersten Zeile der Tabelle  berechnet und gezählt wird.
  2. Der Teil der Abfrage COUNT(tabelle2.id)+1 as Position erzeugt die Spalte Position, die die fortlaufenden Nummer enthält, wobei der Abstand im Punkt 1 gezählt wird. Die Addierung der eins ist notwendig, damit die erste fortlaufende Nummer die 1 und nicht die 0 ist. Damit Count ohne Sternchen funktionieren darf, müssen wir zwingend den GROUP BY Klausel aufführen
  3. Es wird in der ersten Tabelle nach der Spalte sortiert, die unsere Bedingung für den LEFT JOIN erfüllt, ohne diese Sortierung wird die Abfrage nicht funktionieren.

Und, es funktioniert!

Benötigen Sie Hilfe bei der Programmierung Ihrer Abfragen? Nehmen Sie gerne mit uns Kontakt auf – wir helfen Ihnen weiter.

Teilen

Hinterlasse eine Antwort

Du musst angemeldet sein, um einen Kommentar abzugeben.