Giả sử bạn cố gắng sắp xếp mảng-mảng này theo phần tử đầu tiên:
[
[ 1, 1 ],
[ 1, 2 ],
[ 1, 3 ]
]
Cả hai điều này (và một số kết quả khác) đều là kết quả hợp lệ vì bạn có các khóa sắp xếp trùng lặp:
[ [1,1], [1,2], [1,3] ]
[ [1,3], [1,1], [1,2] ]
Bạn đang gặp phải vấn đề tương tự bên trong cơ sở dữ liệu. Bạn nói rằng:
Vì vậy, năm giá trị đó có thể xuất hiện theo bất kỳ thứ tự nào và vẫn đáp ứng điều kiện ORDER BY đã chỉ định của bạn. Họ thậm chí không phải ra khỏi cơ sở dữ liệu theo thứ tự giống nhau trong hai lần thực thi cùng một truy vấn.
Nếu bạn muốn thứ tự nhất quán, bạn cần đảm bảo rằng mỗi hàng trong tập kết quả của bạn có một khóa sắp xếp duy nhất để các mối quan hệ sẽ bị phá vỡ một cách nhất quán. Đây là ActiveRecord nên bạn sẽ có một id
duy nhất có sẵn để bạn có thể sử dụng nó để phá vỡ mối quan hệ đặt hàng của bạn:
result = Rom::Leaderboard.order('pvp_vs desc, win_percent desc, id').limit(200)
# --------------------------------------------------------------^^
Điều đó sẽ cung cấp cho bạn một thứ tự xác định rõ ràng và duy nhất.