Update product set order = order+1 where order >= @value changed
Anche se nel tempo otterrai "spazi" sempre più grandi nel tuo ordine, ma verrà comunque "ordinato"
Ciò aggiungerà 1 al valore che viene modificato e ogni valore successivo in un'unica affermazione, ma l'affermazione sopra è ancora vera. nel tuo ordine si formeranno "spazi" sempre più grandi arrivando eventualmente al punto di superare un valore INT.
Soluzione alternativa data la mancanza di spazi:
Immagina una procedura per:UpdateSortOrder con parametri di @NewOrderVal, @IDToChange,@OriginalOrderVal
Processo in due fasi a seconda se il nuovo/vecchio ordine si sta spostando verso l'alto o verso il basso nell'ordinamento.
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];
Per quanto riguarda le migliori pratiche; la maggior parte degli ambienti in cui sono stato in genere desidera qualcosa raggruppato per categoria e ordinato in ordine alfabetico o in base alla "popolarità in vendita", annullando così la necessità di fornire un ordinamento definito dall'utente.