RSS MySQL Update soll Spalte neu nummerieren

verfasst 17.04.2009 von MediaCix | kurze URL: /t654 | 7 Kommentare

Eine Knobelaufgabe hat mich fast 30min beschäftigt - mittels MySQL Update soll eine Spalte neu nummeriert werden, und dabei soll der älteste Eintrag mit 1 anfangen. Der komplizierte Weg wäre eine while Schleife die etliche Querys mit Update macht. Leider ist das aus Performance-Sicht nicht die beste Lösung. Eine Lösung mit nur einen Query wäre dagegen optimal. Nach etlichen Versuchen hab ich dann eine Lösung gefunden.

Ausgangspunkt:

Table test
+-----+-------+
| id  | platz | 
| 10  |       |
| 24  |       |
| 36  |       |
| 48  |       |
| 50  |       |
+-----+-------+


MySQL-Update mit MySQL Variable:
SET @c := 0; 
UPDATE test SET platz = ( SELECT @c := @c + 1 ) ORDER BY id ASC;


daraus wird:
Table test
+-----+-------+
| id  | platz | 
| 10  |  1    |
| 24  |  2    |
| 36  |  3    |
| 48  |  4    |
| 50  |  5    |
+-----+-------+


Wichtig ist, dass das Update Query mit „SET @c := 0;” und abschließenden Semikolon ausgeführt wird.

bisherige Kommentare

1
04.06.2009
[Martin Helfer] meint dazu:
Vielen Danke für den Tipp! Wäre nicht von selbst daraufgekommen.

2
21.06.2009
[Beni] meint dazu:
Vielen Dank! Dies ist für mich sehr nützlich. Es funktioniert wunderbar in der Mysql-Datenbank. Leider aber nicht mit PHP. Gibts für PHP auch eine formulierung?

3
21.06.2009
M.S. meint dazu:
War das jetzt genial oder einfach nur gemein? :-)
Habe gesten fast den ganzen Tag für ein Script benötigt, welche das Selbe macht und stosse nun heute per Zufall auf Deine Lösung, die erst noch sehr viel schneller ist.
Hmpf .... Danke!

4
21.06.2009
Mario meint dazu:
Zitat von Beni

„Leider aber nicht mit PHP”


Dafür ist es auch nicht vorgesehen! Der Umweg über PHP ist von der Performance ungüstig, und man müsste das über zusätzliche Schleifen und Querys lösen.

5
06.05.2010
Unbekannt meint dazu:
Die Performance von PHP ist IMMER ungünstig! ;-)

6
25.03.2011
Jan meint dazu:
Ich habe diese Lösung jetzt schon viele Jahre eingesetzt, seit dem der Provider die PHP und MySQL Version geändert hat, funktioniert dieses nummerieren nicht mehr... Woran kann das liegen??

7
20.03.2012
MediaCix meint dazu:
Also mit MySQL 5.1.52 geht das noch wunderbar. Auch ein einfaches SELECT kann damit nummeriert werden.

neuen Kommentar schreiben

Ich möchte automatisch eine E-Mail bei neuen Kommentaren erhalten.



Themen mit ähnlichen Inhalten

    - keine weiteren Themen gefunden -

Tags zum Beitrag

mysql-update