Tom: Zeilen auf/ab bewegen

Beitrag lesen

Hello,

-) auf: rang-1 auf die Seite legen, neuen Datensatz auf rang-1 legen, alten Datensatz auf rang legen. Also eigentlich nur vertauschen, ebenso abwärts.

Gibts da irgendwo fertige Codeschnippsel oder gar eine bessere Lösung?

Die Datensatznummer (ID) hat nichts mit der Sortierung zu tun, sondern ausschließlich mit der Identifikation des Datensatzes. Su müsstest also eine weitere Spalte "psoition" (o.ä.) einführen. Das Problem wird sein, eine definierte Lücke zu schaffen.
Aber da wird MySQL Dich unterstützen, da Selects generell als Snapshot gehalten werden und nicht als Dynaset.

Du kannst also abfragen

Update tabelle set position = position+1 where filterbedingung and position >= $minposition

um eine Lücke zu schaffen und dann auf $minposition den Datensatz einzufügen und ihn anschließend an seiner alten Position zu löschen. Zu beachten ist, dass das Ding dann eine andere ID bekommt. Um daws zu vermeiden, kann man als erstes dem zu verschiebenden Datensatz die "MaxID" verpassen. dann kann man ihn unter seiner alten ID selbst bei einer Autoincrement-ID mit der neuen $position wieder einfügen.

Man muss während des gesamten Vorganges die Tabelle Locken!

Das Verfahren funktioniert ganz gut so. Ich habe bisher nur noch keine Möglichkeit für ein "Reindex" der $position gefunden. Die User-Variablen, die MySQL dafür eigentlich zur Verfügung stellen sollte, funktionieren leider nicht so, wie ich es bisher gedacht habe

Harzliche Grüße aus http://www.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau