Update product set order = order+1 where order >= @value changed
Chociaż z biegiem czasu będziesz otrzymywać coraz większe „spacje” w swoim zamówieniu, ale nadal będzie ono „sortować”
Spowoduje to dodanie 1 do zmienianej wartości i każdej wartości następującej po niej w jednej instrukcji, ale powyższe zdanie jest nadal prawdziwe. coraz większe "spacje" będą tworzyć się w twoim zamówieniu, prawdopodobnie dochodząc do punktu przekroczenia wartości INT.
Alternatywne rozwiązanie przy braku spacji:
Wyobraź sobie procedurę dla:UpdateSortOrder z parametrami @NewOrderVal, @IDToChange,@OriginalOrderVal
Proces dwuetapowy, w zależności od tego, czy nowe/stare zamówienie porusza się w górę czy w dół sortowania.
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];
W odniesieniu do najlepszych praktyk; większość środowisk, w których byłem, zazwyczaj chce coś pogrupować według kategorii i posortować alfabetycznie lub na podstawie „popularności w sprzedaży”, co neguje potrzebę zapewnienia sortowania zdefiniowanego przez użytkownika.