2011-04-09 58 views
1

我有2个模型,用户和购买。 一个User has_many :purchasesPurchase belongs_to :userRuby on Rails,找到前5名用户通过采购订购

采购领域是:

id, product_id, user_id, amount, created_at 

我所试图实现的是一个方法调用,如: User.top_five这将返回5个用户提供最佳购买价值,即每个用户的purchase.amount字段的总和。

我也希望能够做一些类似User.top_five(:start_date=>'01/01/2010',:end_date=>'31/12/2010'),即选择一个时间段来计算前五名用户。

所以我一直在尝试获得连接,总和,order_bys等的正确组合,但我只是没有得到它。所以希望有人能指引我正确的方向! 希望我已经提供了足够的信息,这是我的第一个问题。

感谢

回答

3

我建议是这样

def self.top_five(start_date, end_date) 
    User.all(:select => "users.*, SUM(purchased.amount) as purchased_sum", 
      :joins => "LEFT JOIN purchases AS purchased ON purchased.user_id = users.id", 
      :group => "users.id", 
      :conditions => ["purchased.created_at BETWEEN ? AND ?", start_date, end_date], 
      :order => "purchased_sum DESC", 
      :limit => 5) 
end 
+0

感谢烫发。我不得不稍微调整一下sql,但这肯定帮助了我。 – Paul 2011-04-11 17:16:47