У меня есть модель Server с has_many: domains. Я хочу заказать мои результаты по количеству доменов, и я не хочу использовать cache_count для этого. Так что я как-лRails select query странное поведение
@servers = @servers.joins(:domains).select('servers.*, COUNT(domains.id) AS domains_count').group('servers.id').reorder('domains_count ASC'))
У меня есть ошибка no such column: domains_count
. Поэтому я проверяю SQL в журнале и становлюсь действительно удивленным
SELECT COUNT(*) AS count_all, servers.id AS servers_id FROM "servers" INNER JOIN "domains" ON "domains"."server_id" = "servers"."id" GROUP BY servers.id ORDER BY domains_count ASC
Почему это делается? Что я должен сделать, чтобы мой запрос работал?
Спасибо.
UPD: Я ошибся. Этот странный count_all
производится на @servers.size
(еще ПОЧЕМУ?). Однако все же у меня есть
SELECT servers.*, COUNT(domains.id) AS domains_count FROM "servers" INNER JOIN "domains" ON "domains"."server_id" = "servers"."id" GROUP BY servers.id ORDER BY domains_count ASC
Который всегда производит только одну запись.
Хорошо, теперь у меня есть 'SELECT "сервера". * FROM "сервера" Inner Join "домены" ON "домены". "Server_id"= "сервер". "Идентификатор" GROUP BY servers.id ORDER BY COUNT (domains.id) ASC', но все равно только одна строка в результате. – Ximik
Сколько строк занимает каждая из таблиц? –
Спасибо за подсказку! У меня была одна запись с 20 доменами, а другие без доменов. Поэтому я должен использовать LEFT JOIN, например, SELECT-серверы. * FROM "серверы" LEFT JOIN "домены" ON "домены". Server_id "=" servers "." Id "GROUP BY servers.id ORDER BY COUNT (домены .id) ASC'. – Ximik