この配列の配列を最初の要素で並べ替えようとしたとします。
[
[ 1, 1 ],
[ 1, 2 ],
[ 1, 3 ]
]
ソートキーが重複しているため、これらの両方(および他のいくつか)は有効な結果です:
[ [1,1], [1,2], [1,3] ]
[ [1,3], [1,1], [1,2] ]
データベース内で同じ問題が発生しています。あなたはそれを言います:
したがって、これらの5つの値は任意の順序で表示でき、指定したORDERBY条件を満たすことができます。同じクエリを2回実行しても、同じ順序でデータベースから取得する必要はありません。
一貫した順序が必要な場合は、結果セットの各行に一意の並べ替えキーがあり、タイが一貫して解除されるようにする必要があります。これはActiveRecordであるため、一意のid
があります 利用できるので、それを使用して注文の結びつきを断ち切ることができます:
result = Rom::Leaderboard.order('pvp_vs desc, win_percent desc, id').limit(200)
# --------------------------------------------------------------^^
これにより、明確で一意の順序が得られます。