Update product set order = order+1 where order >= @value changed
Mặc dù theo thời gian, bạn sẽ nhận được các "khoảng trắng" ngày càng lớn theo thứ tự của mình nhưng nó vẫn sẽ "sắp xếp"
Điều này sẽ thêm 1 vào giá trị đang được thay đổi và mọi giá trị sau nó trong một câu lệnh, nhưng câu lệnh trên vẫn đúng. các "khoảng trắng" lớn hơn và lớn hơn sẽ hình thành theo thứ tự của bạn có thể vượt quá giá trị INT.
Giải pháp thay thế được đưa ra mong muốn không có khoảng trống:
Hãy tưởng tượng một thủ tục cho:UpdateSortOrder với các tham số của @NewOrderVal, @ IDToChange, @ OriginalOrderVal
Quy trình hai bước tùy thuộc vào việc đơn hàng mới / cũ đang di chuyển lên hay xuống loại.
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];
Về thực hành tốt nhất; hầu hết các môi trường tôi đã ở thường muốn thứ gì đó được nhóm theo danh mục và sắp xếp theo thứ tự bảng chữ cái hoặc dựa trên "mức độ phổ biến khi bán", do đó phủ nhận nhu cầu cung cấp loại do người dùng xác định.