Mailinglisten-Archive |
Hallo Sebastian, auch dir vielen Dank für deine Antwort. Sebastian Mendel wrote: > wenn immer nur ein Eintrag verschoben wird: > > // +, noch 'oben' > UPDATE `table` > SET `prio` = `prio` - 1 > WHERE `prio` BETWEEN $prio_old AND $prio_new; > // oder > // -, nach unten > UPDATE `table` > SET `prio` = `prio` + 1 > WHERE `prio` BETWEEN $prio_old AND $prio_new; > > // und natürlich > UPDATE `table` > SET `prio` = $prio_new > WHERE `id` = $id_of_moved_object; Deine Lösung hört sich ja total einfach an. Im Grunde geht es ja auch nur um das Verschieben der Sortierspalte nach oben oder unten. Beim Testen hatten die Spalten id und prio identische Werte (1, 2, 3). Ich wollte den dritten Datensatz nach oben verschieben: UPDATE test SET prio = prio -1 WHERE prio BETWEEN 3 AND 2; UPDATE test SET PRIO = PRIO -1 WHERE id = 3; Danach sah es so aus: mysql> select id,prio from test order by prio; +----+------+ | id | prio | +----+------+ | 1 | 1 | | 2 | 2 | | 3 | 2 | +----+------+ Die id 2 bräuchte den Wert 3. Aber wie das mit 2 Anweisungen erschlagen ...? Vielen Dank im Voraus für weitere Hilfe. Gehe jetzt den anderen Lösungshinweisen nach. VG Simon
php::bar PHP Wiki - Listenarchive