SQL Renummerierung der ID

vilden

Lt. Junior Grade
Registriert
Juli 2007
Beiträge
482
Hey ho :)

Folgende Beispieltabelle habe ich erstellt:

ID | Datum | Wert
14 | 02.02.12| abc
15 | 05.02.12 | abc
16 | NULL | abc

Nun wollte ich die ganzen Datensätze renummerieren, heißt 1,2,3 statt 14,15,16.

Ist eigentlich auch ganz einfach:

Code:
ALTER TABLE Tabelle DROP ID;

ALTER TABLE Tabelle
ADD ID INT UNSIGNED NOT NULL AUTO_INCREMENT FIRST,
ADD PRIMARY KEY (ID);

Nun habe ich aber das Problem das alles durcheinander ist. Möchte gerne nach Datum sortieren und dann erst die ID neu vergeben.

So soll das aussehen am Ende:

ID | Datum | Wert
1 | NULL | abc
2 | 02.02.12 | abc
3 | 05.02.12 | abc

Bekomme leider nicht das richtige Query hin um dies zu realisieren. Meine Idee war vorher nen Select mit einem ORDER BY ASC, aber diese beiden Abfragen lassen sich nicht einfach verbinden, bzw. ich weiß nicht wie :D

Hoffe ihr könnt mir weiterhelfen.
 
Hi,

kleiner Tipp: du kannst einem AutoInc-Wert auch explizit Daten mitgeben. Also z.B. durch einen UPDATE-Befehl ;) Sowas wie SET id => (id-13)

Und wenn du den Updatebefehl auf ein vorher nach Datum sortiertes SELECT anwendest... ;)

Wäre jetzt was was sehr schnell klappt im Normalfall :)

BTW: Wenn du manuell was an einer AutoInc-Spalte machst: AutoInc-Wert danach auch entsprechend anpassen.

Oder auch noch einfach: Mit einem SELECT als Grundlage eine neue Tabelle machen, die die Werte selber wieder mit einem AutoInc versieht und nach Datum sortiert einfügt.

Wäre die schönere Möglichkeit finde ich.

VG,
Mad
 
was ist der sinn des ganzen? würde es auch mit nem sortierten reinkopieren in eine neue tabelle erledigen.
 
Hallo,

ganz ehrlich?
Die ID's 1-13 waren auch noch da ... sie gehörten zu als "gelöscht markierten" Datensätzen.

Bitte gewöhn dich an eine einmal erstellte ID. Wie die Daten in der Datenbank stehen ist doch völlig Wusrt.

Wenn du sie sortiert ausgeben willst benutzt man:

SELECT * FROM tabelle ORDER BY Datum;

Grüße,
d2boxSteve
 
Eben. Primary Keys sollten IMMER bleiben wie sie sind, sonst versaubeutelt man sich am Ende sogar noch die referentielle Integrität.
 
Die Nummern 1 - 13 gab es vorher gar nicht ;) Ich habe mir nur Daten rausgesucht und diese zum Testen in eine Datenbank importiert. Der Primary Key spielt hier überhaupt keine Rolle beim Testen ;) Und da ich nur 3 Datensätze habe wollte ich das gerne einmal versuchen die Nummerierung zu ändern. Per Hand ist es bei 3 nicht so schlimm ^^

@Madman1209

Hab es per Update gemacht ;) Danke.
 
Neue Tabelle definieren bei der ID auto increment is
und Datum + wert halt noch leer.

dann die inhalte der spalten datum + wert von der vorhandenen tabelle
in die leere rüberschieben, per statement.

müsste normal gehn.
 
Also noch mal ganz grundsätzlich: Die ID dient NUR den eindeutigen Identifizierung des Datensatzes!
Dabei ist es völlig egal ob die Datenbank diese Reihenfolge wählt: 90, 23, 16, 100, 44, 1 oder diese: 1,2,3,4,5
Wichtig ist NUR (!!!) dass die Nummern eindeutig sind. Diese IDs benutzt man auch nicht zum rechnen oder sonst was, man schaut sie sich im Normalfall nicht mal an, einfach nur benutzen.
 
Zurück
Oben