Rails 3:如何找到得分最高的用户?

时间:2011-04-27 02:29:33

标签: ruby-on-rails ruby-on-rails-3

我正在深入研究Rails,我正在学习如何使用ActiveRecord,并且我已经创建了一个具有score属性的Player模型。我正试图找出一种有效的方法来查询数据库中得分最高的玩家。如果两个或更多球员并列最高分,我将需要所有球员。我可以通过先排序列表来弄清楚如何做到这一点,但我不确定是否有必要。检索一组得分最高的玩家最有效的方法是什么?

另外,在DB中为分数列创建索引会提高此查询的速度吗?

非常感谢你的智慧!

2 个答案:

答案 0 :(得分:1)

Player.order("score DESC").limit(50)

应该很简单。看看rails guides

或者更好的是,做这样的事情:

high_score = Player.maximum(:score)
high_score_players = Player.where(:score => high_score).all

答案 1 :(得分:1)

如果您在WHEREORDER BY中查询某列,则几乎总是有一个索引。如果没有索引,您的数据库必须进行表扫描,并且每一个都是昂贵的。

捕获得分最高的玩家可以通过两次操作完成,首先确定最高分,然后获取所有具有该分数的玩家:

@players = Player.where("score=(SELECT MAX(score) FROM #{Player.table_name}").all