PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Rails :appeler .limit(5) modifie l'ordre des résultats

Supposons que vous essayiez d'ordonner ce tableau de tableaux par le premier élément :

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

Ces deux (et plusieurs autres) sont des résultats valides car vous avez des clés de tri en double :

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

Vous rencontrez le même problème dans la base de données. Vous dites que :

Ainsi, ces cinq valeurs peuvent apparaître dans n'importe quel ordre et toujours satisfaire votre condition ORDER BY spécifiée. Ils n'ont même pas à sortir de la base de données dans le même ordre lors de deux exécutions de la même requête.

Si vous souhaitez un classement cohérent, vous devez vous assurer que chaque ligne de votre ensemble de résultats possède une clé de tri unique afin que les liens soient rompus de manière cohérente. Il s'agit d'ActiveRecord, vous aurez donc un id unique disponible afin que vous puissiez l'utiliser pour rompre vos liens de commande :

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

Cela vous donnera un ordre bien défini et unique.