Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
agat 16.06.2007 12:33
Ситуайия следующая. Есть таблица групп, среди полей которых есть orderPosition. Данное поле отвечает за место в списке групп. Т.е. группы выводятся в порядке orderPosition.id orderPosition 1 1 2 2 3 3теперь мне нужно поменять группу 1 - выставить ее после группы 3. Т.е. по идее порядок должен стать таким
id orderPosition 1 3 2 1 3 2Как мне это сделать по-спортивному? Пока додумался только до такого
################################################ @prepareOrderPosition[iPosition] ^oSql.void{ UPDATE groups SET orderPosition = orderPosition + 1 WHERE orderPosition > ^iPosition.int(0) } # end of @prepareOrderPosition[] ################################################ @updateOrderPositions[][tGroups] $tGroups[^getGroup[]] ^if($tGroups){ ^tGroups.menu{ ^oSql.void{ UPDATE groups SET orderPosition = ^tGroups.line[] WHERE id = ^tGroups.id.int(0) } } } # end of @updateOrderPositions[]из формы приходит будущая позиция группы (вернее позиция группы, после которой мы вставим текущую группу), я увеличиваю позиции всех групп, позиции которых больше той, в которую мне надо вставить текущую, на 1, потом вставляю текущую группу. И чтобы номера позиций не разрастались до бесконечности, после операции нумерую позиции заново с единицы. Все работает, но через зад как-то. Может у кого есть алгоритм правильный для моей ситуации? Или хотя бы намекните на реализацию.