Подзапрос ActiveRecord в предложении select - PullRequest
2 голосов
/ 24 января 2012

Итак, я получаю кучу записей Волонтеров, с некоторой фильтрацией и сортировкой, что хорошо.Но я хотел бы также подсчитать количество дочерних элементов, которым помогает каждый волонтер (используя волонтер_для таблицы детей), как подзапрос в предложении select, чтобы избежать необходимости выполнять отдельный запрос для каждой записи.В качестве бонуса было бы хорошо иметь возможность сортировать по этому количеству тоже!

Я бы хотел закончить сгенерированным запросом, подобным этому, и иметь возможность доступа к столбцу 'kids':

SELECT id, name, (SELECT COUNT(*) FROM children WHERE volunteer_id = volunteers.id) AS kids FROM volunteers

Есть ли способ сделать это с Арелом?У меня было немного разведчика вокруг, и я еще ничего не нашел.

Можно ли присоединиться к таблице детей и получить: count (children.id)?

Спасибо за любую помощь:)

1 Ответ

1 голос
/ 24 января 2012

Правильный способ сделать это с помощью SQL - воспользоваться предложением GROUP BY:

SELECT v.id, v.name, COUNT(*) AS kids
FROM volunteers v
LEFT OUTER JOIN children c ON v.id = c.volunteer_id
GROUP BY v.id, v.name

В AR есть метод .group () для использования запросов GROUP BY.

...