Tom: Tabellen Sortierung selbst beeinflussen

Beitrag lesen

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 :-)