sql >> Base de Datos >  >> RDS >> PostgreSQL

Rails:llamar a .limit(5) cambia el orden de los resultados

Suponga que intenta ordenar esta matriz de matrices por el primer elemento:

[
  [ 1, 1 ],
  [ 1, 2 ],
  [ 1, 3 ]
]

Ambos (y varios otros) son resultados válidos porque tiene claves de clasificación duplicadas:

[ [1,1], [1,2], [1,3] ]
[ [1,3], [1,1], [1,2] ]

Está encontrando el mismo problema dentro de la base de datos. Tu dices que:

Entonces, esos cinco valores pueden aparecer en cualquier orden y aun así satisfacer su condición ORDER BY especificada. Ni siquiera tienen que salir de la base de datos en el mismo orden en dos ejecuciones de la misma consulta.

Si desea un orden consistente, debe asegurarse de que cada fila en su conjunto de resultados tenga una clave de ordenación única para que los empates se rompan de manera consistente. Esto es ActiveRecord, por lo que tendrá un id único disponible para que pueda usarlo para romper sus lazos de pedidos:

result = Rom::Leaderboard.order('pvp_vs desc, win_percent desc, id').limit(200) 
# --------------------------------------------------------------^^

Eso le dará un orden bien definido y único.