PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Rails:Chamar .limit(5) altera a ordem dos resultados


Suponha que você tente ordenar este array-of-arrays pelo primeiro elemento:
[
  [ 1, 1 ],
  [ 1, 2 ],
  [ 1, 3 ]
]

Ambos (e vários outros) são resultados válidos porque você tem chaves de classificação duplicadas:
[ [1,1], [1,2], [1,3] ]
[ [1,3], [1,1], [1,2] ]

Você está encontrando o mesmo problema dentro do banco de dados. Você diz que:

Portanto, esses cinco valores podem aparecer em qualquer ordem e ainda satisfazer sua condição ORDER BY especificada. Eles nem precisam sair do banco de dados na mesma ordem em duas execuções da mesma consulta.

Se você deseja uma ordenação consistente, precisa garantir que cada linha em seu conjunto de resultados tenha uma chave de classificação exclusiva para que os empates sejam quebrados de forma consistente. Este é o ActiveRecord, então você terá um id exclusivo disponível para que você possa usar isso para quebrar seus laços de pedidos:
result = Rom::Leaderboard.order('pvp_vs desc, win_percent desc, id').limit(200) 
# --------------------------------------------------------------^^

Isso lhe dará uma ordenação bem definida e única.