1

RoR を使用してバスケットボール リーグを管理するアプリを作成しています。私は2つのテーブルを持っています: Teams& Games. このGamesテーブルは、外部キーを使用して 2 つのチームを取り、次のように各チームの得点を含みます。

チームとゲーム

ここで、すべてのチームとその勝敗記録をリストしたいと思います。チームを含む games テーブル内のすべてのレコードをカウントする foreach ループよりも、これを行う簡単な方法は考えられません。チームは他のチームよりも多くのレコードを持っています。そして再び損失のために。もっと簡単な方法があるはずです。

助言がありますか?

4

1 に答える 1

0

Ruby ですべてのレコードをロードしてカウントするのは避けた方がよいという意見には同意します。SQL クエリで実行すると、はるかに高速になります。

def team_stats(team_id)
  # Wins are any game where the team played and scored higher than the other team
  wins = Game.where('(home_team_id = ? AND home_team_score > away_team_score) OR (away_team_id = ? AND home_team_score < away_team_score)', team_id, team_id).count

  # The opposite for losses
  losses = Game.where('(home_team_id = ? AND home_team_score < away_team_score) OR (away_team_id = ? AND home_team_score > away_team_score)', team_id, team_id).count

  # Ties are not accounted for

  return {:wins => wins, :losses => losses}
end
于 2012-04-29T23:36:16.517 に答える