sql >> Database teknologi >  >> RDS >> PostgreSQL

Rails:Kaldning af .limit(5) ændrer rækkefølgen af ​​resultater

Antag, at du prøver at sortere denne array-af-arrays efter det første element:

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

Begge disse (og flere andre) er gyldige resultater, fordi du har dublerede sorteringsnøgler:

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

Du støder på det samme problem inde i databasen. Du siger det:

Så disse fem værdier kan vises i enhver rækkefølge og stadig opfylde din angivne ORDER BY-tilstand. De behøver ikke engang at komme ud af databasen i samme rækkefølge i to udførelser af den samme forespørgsel.

Hvis du ønsker ensartet rækkefølge, skal du sikre dig, at hver række i dit resultatsæt har en unik sorteringsnøgle, så båndene brydes konsekvent. Dette er ActiveRecord, så du har et unikt id tilgængelig, så du kan bruge det til at bryde dine bestillingsbånd:

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

Det vil give dig en veldefineret og unik bestilling.




  1. returnere værdi ved en position fra STRING_SPLIT i SQL Server 2016

  2. LAST_DAY() Funktion i Oracle

  3. Markør i procedure, der returnerer flere værdier end forespørgsel

  4. Oprettelse af databasetabel i PL/SQL procedure