Còn về việc chỉ sử dụng integer
cột xác định thứ tự? Theo mặc định, bạn gán các số * 1000, như 1000, 2000, 3000 .... và nếu bạn di chuyển 3000 từ 1000 đến 2000, bạn thay đổi nó thành 1500. Vì vậy, trong hầu hết các trường hợp, bạn không cần phải cập nhật các số khác. Tôi sử dụng cách tiếp cận này và nó hoạt động tốt. Bạn cũng có thể sử dụng double
nhưng sau đó bạn không có quyền kiểm soát về độ chính xác và lỗi làm tròn, vì vậy không nên sử dụng nó.
Vì vậy, thuật toán sẽ trông như thế nào :giả sử bạn di chuyển B đến vị trí sau A. Đầu tiên thực hiện chọn để xem thứ tự của bản ghi bên cạnh A. Nếu nó cao hơn thứ tự của A ít nhất +2 thì bạn chỉ cần đặt thứ tự của B để phù hợp với giữa. Nhưng nếu nó chỉ cao hơn +1 (không có khoảng trắng sau A), bạn chọn các bản ghi gần nhau của B để xem có bao nhiêu khoảng trống ở phía này, chia cho 2 và sau đó thêm giá trị này vào thứ tự của tất cả các bản ghi giữa A và B. Đó là nó!
(Lưu ý rằng bạn nên sử dụng giao dịch / khóa cho bất kỳ thuật toán nào chứa nhiều hơn một truy vấn duy nhất, vì vậy điều này cũng áp dụng cho trường hợp này. Cách dễ nhất là sử dụng giao dịch InnoDB.)