2016-06-21 3 views
-1

У меня есть класс под названием Членство. Там может быть несколько записей с одним и тем же адресом электронной почты. Для того, чтобы получить все записи членства по электронной почте, я создаю индекс по электронной почте и делать:Извлечение нескольких записей по электронной почте

Membership.where(email: "[email protected]") 

Как дорого вышеописанная операция? Есть ли более эффективный способ сделать это?

Спасибо!

+0

Это способ сделать это эффективно. У вас все настроено! –

+0

Дорогой, в отличие от чего? ..., который просто решает исходный SQL, и это самая прямая команда SQL, которую вы могли бы сделать для чего хотите. Если у вас нет другого атрибута, идентичного электронной почте, это все, что у вас есть. –

ответ

0

Я думаю, что самый эффективный способ с групповой запрос, как это:

Membership.select(:email).group(:email).having("count(*) > 1") 

Это будет генерировать следующий запрос

SELECT "memberships"."email" FROM "memberships" GROUP BY "memberships"."email" HAVING (count(*) > 1) 

, который должен работать на PG и MySQL.

Надеется, что это помогает

EDIT

, если вы хотите увидеть дубликаты, вы можете это сделать (поставить счетчик в конце)

Membership.select(:email).group(:email).having("count(*) > 1").count 

Это даст коллекцию с каждой по электронной почте и количество дубликатов, перечисленных ниже:

{'[email protected]' => 2, ... и т. д.}

Смежные вопросы