Есть список категорий порядок следования которых может задаваться пользователем. Все что я надумал сейчас изложено ниже. Допустим создано 10 категорий: id position 3 1 4 2 6 3 8 4 12 5 14 6 56 7 59 8 73 9 82 10 0. Категория сдвигается на скололько-то позиций ближе к началу. Допустим категорию 56 перемещаем с позиции 7 на позицию 2: [sql] UPDATE `tcategories` SET `position`=`position`+1 WHERE `position` > 1 AND `position` < 8; UPDATE `tcategories` SET `position`=2 WHERE `id`=56; [/sql] 1. Категория сдвигается на сколько-то позиций ближе к концу. Допустим категорию 6 перемещаем с позиции 3 на позицию 9: [sql] UPDATE `tcategories` SET `position`=`position`-1 WHERE `position` > 3 AND `position` < 10; UPDATE `tcategories` SET `position`=9 WHERE `id`=6; [/sql] 2. Две соседние категории меняются местами. Допустим меняем местами 4 и 6, тогда: [sql] UPDATE `tcategories` SET `position`=3 WHERE `id`=8; UPDATE `tcategories` SET `position`=4 WHERE `id`=6; [/sql] 3. Удаляем категорию. Если удаляем категорию 8, то: [sql] DELETE FROM `tcategories` WHERE `id`=8; UPDATE `tcategories` SET `position`=`position`-1 WHERE `position` > 4; [/sql] В категориях в принципе пофиг, пусть будет так. Но вполне возможно понадобится сделать подобную вещь для товаров. А их вполне может оказаться штучек 200-300 в одной категории. Получается при смене местами товара близкого к концу в начало будет 200+ изменения строк единовременно. Это угнетает. Есть ли более оптимальные решения для упорядочивания списков пользователем? P.S. Да я понимаю, что скорее всего товары будут сортироваться по цене, алфавиту и проч. Но вполне возможно нужна будет и такая функция, хочется сразу использовать корректный алгоритм. Спасибо всем кто прочел.
техническая мелочь - создавать временную таблицу и из нее уже обновлять исходную. один инсерт+один апдейт. а так - да, надо писать на БД свою реализацию индекса. ))) начиная от простых двусвязных списков и далее в болото. ))