Hello,
am einfachsten ist es zum Einfügen eines Satzes sicherlich, alle folgenden um eins zu erhöhen und den Satz dann in die "Lücke" einzufügen.
Das lässt sich leicht mit zwei Statements machen
update tabelle
set sortfeld
= sortfeld
+ 1 where sortfeld
> $neueposition
insert into tabelle
set .... sortfeld
= $neueposition
Diese beiden Statements müssen aber durch ein Lock geklammert werden.
Das kann man entweder durch ein explizites Locken der Tabelle erreichen, oder aber durch ein Common (Transaktion), wenn die DB das leistet.
z.B.: http://dev.mysql.com/doc/refman/5.1/en/set-transaction.html
$sortfeld sollte einen Unique Index tragen, damit es keine Doppeleinträge gibt.
Das führt dann aber zu Problemen beim "Weiterrücken". Das Weiterrücken müsste dann von hinten nach vorne stattfinden
update tabelle
set sortfeld
= sortfeld
+ 1
where sortfeld
> $neueposition
order sortfeld
desc
Ich bin mir aber nicht sicher, dass das bei allen DBMS funktioniert.
Manchmal darf man die unter Order stehende Spalte nicht updaten, da der Indexzugriff dann zirkuläre Verläufe erzeugen könnte.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)
