5
我有一個數據庫與6500 players
和每個球員有平均15場比賽results
。訂購球員對他們的協會模型的總和
使用情況
我要生成的球員名單,由他們獎金錢總和(在結果表中的字段)排序。 我寧願這是在某種範圍內,所以我還可以過濾玩家的國家名單等
性能
我已經看到,提cache_counter
領域表現的帖子。在我的案例中,我有成千上萬的結果記錄(75.000+),所以我不希望每次有人訪問生成的列表時都進行計算。
問題
什麼是解決這個最好的模式?我如何實現它?
模式
class Player < ActiveRecord::Base
has_many :results
end
class Result < ActiveRecord::Base
belongs_to :player
end
架構
create_table "players", :force => true do |t|
t.string "name"
t.string "nationality"
end
create_table "results", :force => true do |t|
t.integer "player_id"
t.date "event_date"
t.integer "place"
t.integer "prize"
end
更新
我試圖做到的是讓到一個地步,我可以使用:
@players = Player.order_by_prize
和
@players = Player.filter_by_country('USA').order_by_prize('desc')
我不得不對你的建議做一些調整,現在它準確地按照他們的獎品總數排序:'scope:order_by_prize,joins(:results).select('players.id,players.name,sum(results .prize)as total_prize')。group('players.id')。order('total_prize desc')'。但是,結果只顯示'player.id'和'player.name',而不是'total_prize'結果? –
順便說一下,我做了這些調整,因爲我使用的是PostgreSQL,並且在控制檯中它告訴我在運行代碼後包含group by子句。 –
沒關係!在控制檯中'total_prize'不會顯示在結果輸出的屏幕上,但屬性已正確設置並可用。非常感謝你:) –