parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

вопрос по сортировке

agat 16.06.2007 12:33

Ситуайия следующая. Есть таблица групп, среди полей которых есть orderPosition. Данное поле отвечает за место в списке групп. Т.е. группы выводятся в порядке orderPosition.

Теперь стоит вопрос о смене этих позиций. Как бы это описать доходчиво...

Ну вот есть у меня 3 группы, порядок их такой
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, потом вставляю текущую группу. И чтобы номера позиций не разрастались до бесконечности, после операции нумерую позиции заново с единицы. Все работает, но через зад как-то. Может у кого есть алгоритм правильный для моей ситуации? Или хотя бы намекните на реализацию.