Hallo,
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.
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.
Normalerweise vergibt man in so einem Falle für den nächsten Datensatz auch die nächst höhere ID, bzw. läßt das automatisch mit einem autoincrement-Feld erzeugen. Bei den ID's regelmäßige Änderungen vorzunehemen halte ich für keine so gute Idee, vor allem wenn noch andere Tabellen im Spiel sind (was bei relationalen Datenbanken fast immer der Fall ist), weil da die Beziehungen zu den anderen Tabellen schnell konfus werden. Das vor allem bei Datenbanken wie mySQL, die keine echten Beziehungen mit kaskadierten Updates kennen.
Wenn Du schon eine numerierte Sortierung haben willst, solltest Du evenetuell der Tabelle ein eigens dafür vorgesehenes Feld spendieren.
Also überleg Dir das mit dem ID-Verdrehen nochmals ganz genau.
Gibt es nun eine einfachere Möglichkeit, das heißt, dass ich mit einem MySQL-Aufruf automatisch alle IDs hochzählen lassen kann, oder muss ich es bei der herkömmlichen Methode belassen?
UDPATE tabelle
SET feld=feld+1
WHERE feld>=123
wobei 123 eine willkürliche Zahl ist, die Du am besten mit dem Wert der aktuellen ID ersetzen solltest.
Ach ja, noch etwas: Das solltest Du machen, _bevor_ Du den neuen Datensatz mit der ID 123 einfügst, da Du entweder den Dateensatz nicht speichern kannst (Index_verletzung) oder zwei Datensätze mit der gleichen ID bekommst, die dann beide um eins erhöht werden.
http://www.mysql.com/doc/U/P/UPDATE.html
(Dokumentationen sind nicht nur dazu da, um Speicherplatz zu verbrauchen;-)
Grüße
Klaus