Seite 1 von 1

id neu setzen

Verfasst: 28.12.2003 19:40
von Anardil
Hallo :)

Ich bastel gerade an einem kleinen Script, was ganz simpel Daten speichert und bei Bedarf in einer Liste ausgibt. Jedes einzelne Element bekommt eine ID, welche bei dem Einfüger in die DB mittels auto_increment immer um 1 erhöht wird. Sagen wir, ich habe 5 Elemente und möhte Element 3 löschen, also wird ID 3 gelöscht, bleibt über 1,2,4,5. Jetzt ordne ich die ID's. So dass das eine durchgehende Reihenfolge 1,2,3,4 existiert. Ähnlich verhält es sich beim Einfügen. Ich habe 5 Elemente und möchte zwischen Element 2 und Element 3 ein Neues einfügen. Also nehme ich per (war meine Überlegung und so habe ich es zunächst einmal realisiert) die nachfolgenden Elemente her, erhöhe die ID um jeweils 1 und schaffe so Platz für das neue Element.

Meine eigentliche Frage: Kann ich sowas direkt über eine SQL-Abfrage realisieren oder ist ein kleiner "Umweg" über PHP (Schleife) notwendig, weil es ganz einfach nicht anders funktioniert?

Postet jetzt bitte keinen kompletten Quelltext zur Lösung ;) Bissl will ich ja auch noch basteln.

Verfasst: 28.12.2003 21:08
von Pyramide
http://www.dclp-faq.de/q/q-sql-ids.html
Verwende zum Sortieren besser eine weitere Spalte. Guck dir dazu den Quellcode von phpBB an (Kategorien/Foren Administration).

Verfasst: 28.12.2003 21:40
von Anardil
Jupp da war ich heut auch schon :) Aber nehmen wir mal einfach an ich tu es mit einer separaten Spalte, gibt es so eine Möglichkeit oder generell immer über PHP?

Verfasst: 28.12.2003 21:43
von Pyramide
1,2,3,4

Code: Alles auswählen

UPDATE foo SET bar=bar+1 WERE bar >=3
1,2,4,5

Code: Alles auswählen

INSERT INTO foo(bar) VALUES(3)
1,2,3,4,5

Verfasst: 28.12.2003 22:09
von Anardil
Funzt auch nicht, da z.B. 3 erhöht wird auf 4, die dann aber existent ist -> Error

Verfasst: 28.12.2003 22:21
von Pyramide
So wie du das beschreibst verhält es sich nur, wenn die Spalte einen primary oder unique key hat, was deiner Aussage nach aber angeblich nicht der Fall ist :roll:

Verfasst: 28.12.2003 22:24
von Anardil
Stimmt, aber war ja auch Sinn und Zweck der ID's. Dann werd ich 2 Spalten nehmen, einmal als Primary und einmal zum Sortieren. Ich danke dir!