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



我潜入Rails,我正在学习如何使用ActiveRecord,我已经创建了一个播放器模型,有一个分数属性。我试图找出一个有效的方法来查询DB的玩家(s),有最高分。在两名或两名以上玩家并列得分最高的情况下,我将需要所有玩家。我可以通过先对列表排序来弄清楚如何做到这一点,但我不确定这是否必要。获取一组得分最高的玩家的最有效方法是什么?

另外,在DB中为score列创建索引是否会提高查询的速度?

谢谢你的智慧!

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

应该这么简单。看一下rails指南。

或者更好的是,这样做:

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

如果您要查询作为WHEREORDER BY的一部分的列,您应该几乎总是有一个索引。如果没有索引,您的数据库必须进行表扫描,而每一次扫描都是昂贵的。

获取一个或多个得分最高的玩家可以通过两步操作完成,首先确定最高得分,然后获取所有得分最高的玩家:

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

相关内容

  • 没有找到相关文章

最新更新