sql >> Databáze >  >> RDS >> PostgreSQL

Rails:Volání .limit(5) změní pořadí výsledků

Předpokládejme, že se pokusíte seřadit toto pole polí podle prvního prvku:

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

Oba tyto (a několik dalších) jsou platné výsledky, protože máte duplicitní klíče řazení:

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

V databázi narazíte na stejný problém. Říkáte, že:

Těchto pět hodnot se tedy může objevit v libovolném pořadí a stále splňovat vámi zadanou podmínku ORDER BY. Nemusí ani vycházet z databáze ve stejném pořadí při dvou provedeních stejného dotazu.

Chcete-li konzistentní řazení, musíte zajistit, aby každý řádek ve vaší sadě výsledků měl jedinečný klíč řazení, aby se vazby přerušovaly konzistentně. Toto je ActiveRecord, takže budete mít jedinečné id k dispozici, takže to můžete použít k přerušení vazeb na objednávky:

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

To vám poskytne dobře definované a jedinečné uspořádání.




  1. Jak převést tabulku MySQL na JSON pomocí PHP?

  2. mysql dvousloupcový primární klíč s automatickým přírůstkem

  3. php zobrazit červenou, jantarovou nebo zelenou barvu div v závislosti na tom, kolik dní zbývá?

  4. Mohu obnovit jednu tabulku z úplného souboru mysql mysqldump?