Update product set order = order+1 where order >= @value changed
Selvom du over tid vil få større og større "mellemrum" i din ordre, men den vil stadig "sortere"
Dette vil tilføje 1 til den værdi, der ændres, og hver værdi efter den i én erklæring, men ovenstående sætning er stadig sand. større og større "mellemrum" vil dannes i din ordre, der muligvis kommer til det punkt, hvor en INT-værdi overskrides.
Alternativ løsning givet ønske om ingen mellemrum:
Forestil dig en procedure for:UpdateSortOrder med parametrene @NewOrderVal, @IDToChange,@OriginalOrderVal
Totrinsproces afhængig af om ny/gammel ordre bevæger sig op eller ned i sorteringen.
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];
Med hensyn til bedste praksis; de fleste miljøer, jeg har været i, vil typisk gerne have noget grupperet efter kategori og sorteret alfabetisk eller baseret på "popularitet på udsalg", hvilket afviser behovet for at give en brugerdefineret sortering.