如何使用Rails + MySQL获取分组记录的列表(ID)?

时间:2014-12-18 21:55:26

标签: mysql ruby-on-rails ruby activerecord group-concat

我可以将记录与分组记录的数量分组,如下所示:

@cars = Car.group(:manufacturer).select("id, manufacturer, COUNT(id) AS total_count)

输出将是这样的;

Porsche - 5
Renault - 3
Mercedes - 1
Audi - 2

我现在想弄清楚如何获得分组记录列表(他们的ID) - 就像保时捷一样,我想知道5个分组的汽车(他们的ID)。有没有办法做到这一点 - 理想情况下使用MySQL(在select段落中)?

1 个答案:

答案 0 :(得分:4)

一种方法是使用GROUP_CONCAT来引用文档,“返回一个包含来自组的连接非NULL值的字符串结果。”它会是这样的:

@cars = Car.group(:manufacturer)
          .select("id, manufacturer, COUNT(id) AS total_count, GROUP_CONCAT(id) AS car_ids")

@cars.first.car_ids # => "1,2,5,9"
@cars.first.car_ids.split(',') # => [ "1", "2", "5", "9" ]
但是,我应该提醒一下,将manufacturer作为汽车的文本属性会很快变得头疼。使用has_many :cars的制造商型号会更好。这样您就可以进行更智能的查询,例如: Manufacturer.includes(:cars).all。这就是我们首先使用关系数据库的原因。