Das war eine ziemlich seltsame Anfrage. Eine Tabelle hatte Auto-Increment-IDs – bei MySQL ganz üblich.
Die Anfrage war dann aber, den Inhalt nach Datum neu zu sortieren und diese Reihenfolge in der ID-Spalte abzubilden.
Vorher:
| ID | Date |
|---|---|
| 1 | 2017-01-04 |
| 2 | 2018-02-06 |
| 3 | 2016-12-24 |
Nachher:
| ID | Date |
|---|---|
| 1 | 2016-12-24 |
| 2 | 2017-01-04 |
| 3 | 2018-02-06 |
Tabelle für die Reihenfolge vorbereiten #
Füge der bestehenden Tabelle eine neue Spalte hinzu, die die sortierte Position aufnimmt.
alter table mytable add column orderid intNeue ID generieren #
Jetzt sortieren wir den Inhalt der Tabelle und speichern die Position im sortierten Ergebnis in der neuen Spalte. Im Beispiel sortieren wir nach Datum.
SET @rownum=0;
UPDATE mytable AS i, (SELECT @rownum:=@rownum+1 rownum, id FROM mytable order by mytable.date asc) AS r
SET i.orderid = r.rownum
WHERE i.id = r.id;Alte ID durch die neue ersetzen #
Nun bereiten wir die ID-Spalte auf die neue ID vor, indem wir die ID über den letzten Eintrag hinaus verschieben. Das ist nötig, weil MySQL zeilenweise aktualisiert und beim Überschreiben der ID mit der neuen orderID sonst ID-Kollisionen entstünden.
UPDATE mytable SET id = id+(select max(id) from mytable);jetzt können wir die ID überschreiben mit
UPDATE mytable SET id = orderid;nun bildet die ID die Reihenfolge nach Datum ab.
Aufräumen #
Da wir die ID erfolgreich aktualisiert haben, können wir unsere Hilfsspalte orderid löschen
ALTER TABLE mytable DROP COLUMN orderid;Mein Rat #
Meiner Meinung nach ist das nicht wirklich, wie man eine Datenbank nutzen sollte – das klingt eher nach einer Anfrage von jemandem, der Excel gewohnt ist.