Update product set order = order+1 where order >= @value changed
I když postupem času budete v objednávce získávat větší a větší "mezery", ale stále se "třídí"
To přidá 1 ke změněné hodnotě a každé hodnotě za ní v jednom příkazu, ale výše uvedený příkaz je stále pravdivý. ve vaší objednávce se budou tvořit větší a větší "mezery", které mohou překročit hodnotu INT.
Alternativní řešení při požadavku na žádné mezery:
Představte si postup pro:UpdateSortOrder s parametry @NewOrderVal, @IDToChange,@OriginalOrderVal
Proces ve dvou krocích v závislosti na tom, zda se nová/stará objednávka pohybuje v řazení nahoru nebo dolů.
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];
Pokud jde o osvědčené postupy; většina prostředí, ve kterých jsem byl, obvykle požaduje něco seskupené podle kategorií a seřazené podle abecedy nebo na základě "oblíbenosti v prodeji", čímž se neguje potřeba poskytovat uživatelem definované řazení.