2014-12-18 1 views
1

я могу записи группы с кол-сгруппированных записей, как это:Как получить список (идентификаторов) сгруппированных записей с использованием Rails + MySQL?

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

И выход будет что-то вроде этого;

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

Я пытаюсь выяснить, как теперь также получить список сгруппированных записей (их идентификаторы) - как для Porsche, я хотел бы знать 5 сгруппированных машин (их идентификаторы). Есть ли способ сделать это - в идеале с использованием MySQL (в проходе select)?

ответ

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 как текстовый атрибут Car собирается стать головной болью довольно быстро. Вам будет лучше с моделью производителя, которая has_many :cars. Это позволит вам выполнять гораздо более интеллектуальные запросы, например. Manufacturer.includes(:cars).all. Именно поэтому мы используем реляционные базы данных.

+0

Спасибо @Jordan, 'GROUP_CONTACT', похоже, делает именно то, что мне нужно! Говоря о «изготовлении»; да, я думаю об этом и знаю об этом, мне нужно было изменить его таким образом. – user984621