Update product set order = order+1 where order >= @value changed
Въпреки че с течение на времето ще получавате все по-големи "места" в поръчката си, но тя пак ще "сортира"
Това ще добави 1 към стойността, която се променя, и всяка стойност след нея в едно изявление, но горното твърдение все още е вярно. Във вашата поръчка ще се образуват все по-големи и по-големи „интервали“, които вероятно ще стигнат до точката на превишаване на INT стойност.
Алтернативно решение при желание за липса на интервали:
Представете си процедура за:UpdateSortOrder с параметри на @NewOrderVal, @IDToChange,@OriginalOrderVal
Двуетапен процес в зависимост от това дали нова/стара поръчка се движи нагоре или надолу по сортирането.
If @NewOrderVal < @OriginalOrderVal --Moving down chain
--Create space for the movement; no point in changing the original
Update product set order = order+1
where order BETWEEN @NewOrderVal and @OriginalOrderVal-1;
end if
If @NewOrderVal > @OriginalOrderVal --Moving up chain
--Create space for the momvement; no point in changing the original
Update product set order = order-1
where order between @OriginalOrderVal+1 and @NewOrderVal
end if
--Finally update the one we moved to correct value
update product set order = @newOrderVal where [email protected];
По отношение на най-добрите практики; повечето среди, в които съм бил, обикновено искат нещо, групирано по категории и сортирано по азбучен ред или въз основа на „популярност при продажба“, като по този начин отрича необходимостта от предоставяне на дефинирано от потребителя сортиране.