запрос, который выводит # уникальных записей на поле в модели? - PullRequest
0 голосов
/ 08 мая 2011

Учитывая модель типа:

Contact (id, user_id, xxx, xxxxxxx)

Я хотел бы иметь запрос, который выводит # уникальных записей user_id в модели контактов?Есть мысли о том, как написать это?

Спасибо

Ответы [ 2 ]

3 голосов
/ 08 мая 2011

Есть несколько способов сделать это в SQL, но если вы хотите попытаться как можно больше придерживаться ORM, предоставляемого ActiveRecord, я думаю, что вам ближе всего будет следующее:

@user_ids = Contact.select('DISTINCT user_id').all

@user_ids будет тогда массивом всех идентификаторов пользователей, на которые ссылаются записи в таблице контактов. Если вы хотите узнать, сколько их, вы можете просто позвонить @user_ids.count.


Обновление : еще один способ сделать это, который предоставляет еще больше информации без дополнительных затрат на создание экземпляров каждого объекта и избегает написания SQL, выглядит следующим образом:

Contact.group('user_id').count  #=> { 1 => 3, 2 => 4, 3 => 10 }

Как видите, ответом является хеш с идентификаторами пользователей в качестве ключей и количеством для каждого пользователя в качестве значения. Вы можете получить количество уникальных идентификаторов пользователя с помощью другого .count:

Contact.group('user_id').count.count  #=> 3
2 голосов
/ 08 мая 2011

Вот несколько альтернативных способов сделать это:

Contact.count('user_id', :distinct => true)
# SELECT COUNT(DISTINCT "contacts"."user_id") FROM "contacts"

Contact.count('DISTINCT user_id')
# SELECT COUNT(DISTINCT user_id) FROM "contacts"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...