LoginSignup
2
0

More than 5 years have passed since last update.

Railsで該当モデルの特定オブジェクトの順位を取得する

Last updated at Posted at 2019-01-08

ふと、悩んだので皆さんのお考えを伺いたく。

Userモデルが存在し

id 名前(name) 年齢(age)
1 Suzuki 50
2 Sato 30
3 Takahashi 40
4 Motoki 22
5 Nagano 18

というデータ構造とします。

このとき、例えば、Suzukiさんの、年齢順(降順)の順位を取得したいという時があると思います。
答えは、1位ですね。

では、これを取得する方法は、なんでしょうか?

今回、データ数が、多くても、数千件と考えたとき、下記で十分では?

user = User.find_by(name: 'Suzuki')
ranked_ids = User.all.order('age desc').select(:id).map(&:id)
ranking = ranked_ids.index(user.id) + 1

と思うのですが、みなさんいかがでしょうか・・・?

・データ数が多くなると、カラムを追加して、バッチ処理で事前計算しておきたい?
・DBによっては、RANK関数が使えるのでそっち使ったほうが早い?

などなど、いろいろ懸念はあるかなと思います。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0