Update product set order = order+1 where order >= @value changed
Bien qu'avec le temps, vous obtiendrez des "espaces" de plus en plus grands dans votre commande, mais cela "triera" toujours
Cela ajoutera 1 à la valeur modifiée et à toutes les valeurs qui la suivent dans une instruction, mais l'instruction ci-dessus est toujours vraie. des "espaces" de plus en plus grands se formeront dans votre commande, atteignant éventuellement le point de dépasser une valeur INT.
Solution alternative étant donné le désir de ne pas avoir d'espace :
Imaginez une procédure pour :UpdateSortOrder avec des paramètres de @NewOrderVal, @IDToChange,@OriginalOrderVal
Processus en deux étapes selon si le nouvel/ancien ordre monte ou descend dans le tri.
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];
Concernant les meilleures pratiques ; la plupart des environnements dans lesquels j'ai été veulent généralement quelque chose regroupé par catégorie et trié par ordre alphabétique ou basé sur la "popularité en vente", éliminant ainsi la nécessité de fournir un tri défini par l'utilisateur.