sql >> Databasteknik >  >> RDS >> PostgreSQL

Rails:Att anropa .limit(5) ändrar resultatordningen

Anta att du försöker ordna denna array-of-array efter det första elementet:

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

Båda dessa (och flera andra) är giltiga resultat eftersom du har dubbla sorteringsnycklar:

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

Du stöter på samma problem i databasen. Du säger att:

Så dessa fem värden kan visas i vilken ordning som helst och fortfarande uppfylla ditt angivna ORDER BY-villkor. De behöver inte ens komma ut från databasen i samma ordning i två körningar av samma fråga.

Om du vill ha konsekvent ordning måste du se till att varje rad i din resultatuppsättning har en unik sorteringsnyckel så att banden bryts konsekvent. Detta är ActiveRecord så du har ett unikt id tillgängligt så att du kan använda det för att bryta dina beställningsband:

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

Det ger dig en väldefinierad och unik beställning.




  1. PostgreSQL och ActiveRecord underval för tävlingstillstånd

  2. Kör en fråga i en lagrad MySQL-procedur om ett villkor är sant

  3. MySQL - Är det möjligt att använda LIKE på alla kolumner i en tabell?

  4. Vilken unik nyckel träffas med mitt skär?