Sven Rautenberg: MySQL: Datensatz mit ID einfügen, alle IDs drüber hochzählen

Beitrag lesen

Aloha!

ich habe eine Datenbank, bei der sind die Datensätze mit einem Feld ID nummeriert. Ich rufe das ganze dann immer mit ORDER BY ab. Nun hab ich so ein kleines Script geschrieben, in dem wird per INSERT INTO ein Datensatz angefügt.

Zunächst einmal: Fummel nicht an der primären, eindeutigen ID einer Datenbank herum. Diese ID wird einmal im Leben vergeben und niemals mehr geändert. Anhand dieser ID kannst du immer eindeutig auf den Datensatz zugreifen - ihn z.B. auch löschen. Wäre dumm, wenn ein Browserfenster veraltete Daten hat und denkt, ID 5 wäre alt und muß weg, _nachdem_ ein anderes Browserfenster als ID 5 gerade einen neuen Datensatz eingefügt hat.

Problem: Nun muss ich in einer for-Schleife (ach ja, hab ich ganz vergessen, ich verwende PHP) alle IDs, die größer sind als die ID des neuen Datensatzes um 1 hochzählen.

Habe eine Spalte für diese Ordnungszwecke. Die kannst du dann belegen, wie du lustig bist, und auch sortieren lassen.

Vor dem Insert mußt du wissen, welche Ordnungsnummer dein neuer Datensatz haben soll. Beispielsweise die Nummer 6. Schaffe dann Platz für den neuen Datensatz: Alle derzeitigen Ordnungsnummern, die 6 oder größer sind, müssen um 1 erhöht werden:

UPDATE tabelle SET ordnungszahl=ordnungszahl+1 WHERE ordnungszahl >= 6;

Danach hast du Platz für die neue Nummer 6:

INSERT INTO tabelle (ordnungszahl) VALUES (6);

Beim Löschen von Werten gehts genauso (nur andersherum):

Stelle fest, welche Ordnungszahl dein Datensatz hat. Dann
DELETE FROM tabelle WHERE id=eineID; (sicher ist sicher - siehe oben);
Und zum Schluß:
UPDATE tabelle SET ordnungszahl=ordnungszahl-1 WHERE ordnungszahl > gelöschterwert;

- Sven Rautenberg