通过电子邮件检索多个记录



我有一个称为成员资格的类。可能会有多个带有相同电子邮件的记录。要通过电子邮件检索所有会员记录,我正在通过电子邮件创建索引并执行:

Membership.where(email: "example@example.com")

上述操作有多贵?是否有更有效的方法?

谢谢!

我认为最有效的方法是这样的组查询:

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

这将产生以下查询

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

应该在PG和MySQL上使用。

希望它有帮助

编辑

如果您想查看重复项,则可以执行此操作(最后一个计数)

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

这将为每张电子邮件和这样列出的重复数量提供一个集合:

{'some@duplicate.com'=> 2,...等}

最新更新