Update product set order = order+1 where order >= @value changed
時間の経過とともに、注文の「スペース」はどんどん大きくなりますが、それでも「並べ替え」られます
これにより、変更される値とその後のすべての値に1が追加されますが、上記のステートメントは引き続き当てはまります。ますます大きな「スペース」が順番に形成され、INT値を超える可能性があります。
スペースがないことを望む代替ソリューション:
次のプロシージャを想像してみてください:@ NewOrderVal、@ IDToChange、@ OriginalOrderVal
のパラメータを持つUpdateSortOrder新しい/古い注文が並べ替えを上または下に移動しているかどうかに応じて、2つのステップのプロセス。
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];
ベストプラクティスについて;私がこれまで行ってきたほとんどの環境では、通常、カテゴリ別にグループ化してアルファベット順に並べ替えたり、「販売中の人気」に基づいて並べ替えたりする必要があるため、ユーザー定義の並べ替えを提供する必要はありません。