mysql - Rails 4 Active Record uniq 通过一列查询

标签 mysql ruby-on-rails activerecord

假设我有一个模型 Account,其中包含 :email、:name 等 列。电子邮件不是唯一的。我想要的是添加一个 chainable scope 来选择具有不同电子邮件但具有所有其他字段的行。 “可链接”是指我可以这样做:Account.uniq_by_email.where(bla bla)

我尝试过的:

  1. 使用选择:

    def self.uniq_by_email
      select('distinct email')
    end
    

    对我不起作用,因为它只选择电子邮件字段。

  2. def self.uniq_by_email
      group(:email)
    end
    

    这几乎是我想要的:我可以链接它并选择所有字段。但是 count 方法有一个奇怪的地方:正如您已经猜到的那样,它返回电子邮件计数的散列。但我希望它返回“简单的”ActiveRecord_Relation,其中 count 仅返回计数而不是哈希。这有可能实现吗?

最佳答案

我的基本想法是只选择每组电子邮件中的第一个条目。 简单点,我创建了一个这样的范围,而不是使用类方法:

scope :uniq_by_email, -> { joins("JOIN (
                                   SELECT MIN(id) as min_id
                                   FROM accounts
                                   GROUP BY email
                                  ) AS temp
                                  ON temp.min_id = id") }

从这里你可以像你描述的那样做一些像链式的事情:

Account.uniq_by_email.where(bla bla)

关于mysql - Rails 4 Active Record uniq 通过一列查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33739319/

相关文章:

ruby-on-rails - 缺少模板页面/索引 { :handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=> ["text/*"]

mysql - 带有聚合函数 MAX 的 Codeigniter Active Record HAVING 子句

ruby-on-rails - Heroku 上的 ActiveRecord PGError 不是本地的

ruby - 每个关联模型的 Rails 3 ActiveRecord 模型总和

mysql - 如何在“where”子句中使用用户定义的参数优化查询?

Mysql数据类型支持多个小数点

ruby-on-rails - Rails delay_job以HTML格式发送电子邮件

ruby-on-rails - Rails 在模型中定义无记录检查

php - 如何自动解析 RSS 提要以存储在 MySQL 数据库中?

php - MySQL 选择所有记录并为每个选择单独的记录 - 在一个查询中