2016-06-21 3 views
-1

私はMembershipというクラスを持っています。同じメールで複数のレコードが存在する可能性があります。電子メールですべてのメンバーシップレコードを取得するには、私は電子メールにインデックスを作成しています:電子メールで複数のレコードを取得する

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

上記の操作はどれくらいですか?これを行うより効率的な方法はありますか?

ありがとうございます!

+0

それはそれを効率的に行う方法です。準備万端です! –

+0

これとは対照的に高価です... ...これは生のSQLに解決され、あなたが望むものに対してできる最も直接的なSQLコマンドです。あなたが電子メールと同じ他の属性を持っていない限り、それはあなたが持っているすべてのものです。 –

答えて

0

私が最も効率的な方法は、このようなグループクエリであると思う:

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

これはPGとMySQLで動作するはずのクエリ

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

次生成します。

これは、各電子メールでコレクションを与える

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

(末尾に数を置く)あなたは重複を確認したい場合は、あなたがこれを行うことができ、それは

EDIT

を役に立てば幸い次のように表示される重複数:

{'[email protected]' => 2、...など}

関連する問題