sql >> Database >  >> RDS >> PostgreSQL

Rails:aanroepen van .limit(5) verandert de volgorde van de resultaten

Stel dat u deze array-of-arrays probeert te ordenen op het eerste element:

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

Beide (en verschillende andere) zijn geldige resultaten omdat je dubbele sorteersleutels hebt:

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

U ondervindt hetzelfde probleem in de database. Je zegt dat:

Dus die vijf waarden kunnen in elke volgorde worden weergegeven en toch voldoen aan de opgegeven ORDER BY-voorwaarde. Ze hoeven niet eens in dezelfde volgorde uit de database te komen in twee uitvoeringen van dezelfde zoekopdracht.

Als u een consistente volgorde wilt, moet u ervoor zorgen dat elke rij in uw resultatenset een unieke sorteersleutel heeft, zodat banden consequent worden verbroken. Dit is ActiveRecord, dus je hebt een unieke id beschikbaar, zodat je die kunt gebruiken om je bestellingsbanden te verbreken:

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

Dat geeft je een goed gedefinieerde en unieke volgorde.




  1. Veel tabellen of rijen, welke is efficiënter in SQL?

  2. haal onbewerkte decimale waarde uit mysqldb-query

  3. BULK INSERT ontbreekt laatste rij?

  4. SQL Server Databasenaam wijzigen