Update product set order = order+1 where order >= @value changed
Meskipun seiring waktu Anda akan mendapatkan "spasi" yang lebih besar dan lebih besar dalam pesanan Anda, tetapi itu akan tetap "mengurutkan"
Ini akan menambahkan 1 ke nilai yang diubah dan setiap nilai setelahnya dalam satu pernyataan, tetapi pernyataan di atas masih benar. "spasi" yang lebih besar dan lebih besar akan terbentuk dalam pesanan Anda yang mungkin mencapai titik melebihi nilai INT.
Solusi alternatif yang diberikan keinginan tanpa spasi:
Bayangkan sebuah prosedur untuk:UpdateSortOrder dengan parameter @NewOrderVal, @IDToChange,@OriginalOrderVal
Proses dua langkah tergantung apakah pesanan baru/lama bergerak naik atau turun.
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];
Mengenai praktik terbaik; sebagian besar lingkungan tempat saya berada biasanya menginginkan sesuatu yang dikelompokkan berdasarkan kategori dan diurutkan menurut abjad atau berdasarkan "popularitas yang dijual" sehingga meniadakan kebutuhan untuk menyediakan pengurutan yang ditentukan pengguna.