Rails / MySQL查询在连接多个表时获取计数

时间:2015-04-26 18:32:10

标签: mysql ruby-on-rails-3.2

我有一个具有以下结构的rails应用程序:经销商可以拥有许多汽车,而这些汽车可以有许多不同的促销活动(car_promotions是一个将促销与汽车本身联系起来的表格)。

我想要做的是为每个经销商,计算他们目前拥有的每个不同car_promotion的数量。因此,举例来说,如果有一个名为“5%折扣”的促销活动和一个名为“免费送货”的促销活动,那么第一次促销的汽车数量和第二次促销的汽车数量就会很好。

Dealer.rb:

has_many :cars, :promotions

Car.rb:

has_many :car_promotions
attr_accessor :dealer_id

CarPromotion.rb:

belongs_to :car, :promotion.rb
attr_accessor :car_id, :promotion_id

Promotion.rb

belongs_to :dealer

目前我正在做的是加入汽车和car_promotions模型,然后对于经销商在他们的数据库中进行的每次促销,循环使用它们并获得我的加入中涉及促销的行数。这是有效的,但它真的很慢,所以我想知道如何优化它(使用rails查询或mysql查询)。我的SQL查询编写不是很好,所以我遇到了一些让它正常工作的问题。

我也尝试在我的连接上使用group_by,但我不知道如何使其工作,因为如果我直接在连接上执行group_by,则它没有对promotion_id的引用。

有什么想法吗? 谢谢,

1 个答案:

答案 0 :(得分:0)

一旦超出两个表,我发现经常发现编写原始SQL更容易。这可能会做你想要的:

SELECT COUNT(cp.id), d.id
FROM car_promotians cp
  INNER JOIN cars c ON cp.car_id = c.id
  INNER JOIN dealers d ON c.dealer_id = d.id
GROUP BY d.id

通过ActiveRecord获得有效的SQL查询可能是可能的。如果您发布数据库架构,则可能更容易让某人帮助您。