Mysql Rails 4活动记录uniq按一列查询
假设我有一个模型Mysql Rails 4活动记录uniq按一列查询,mysql,ruby-on-rails,activerecord,Mysql,Ruby On Rails,Activerecord,假设我有一个模型帐户,有:email、:name等列。电子邮件不是唯一的。我想要的是添加一个可链接的范围,它选择具有不同电子邮件但具有所有其他字段的行。“可链接”是指我可以这样做:Account.uniq\u By\u email.where(bla-bla) 我所尝试的: 使用选择: def self.uniq_by_email select('distinct email') end 不适用于我,因为它只选择电子邮件字段 与组一起 def self.uniq_by_email gr
帐户
,有:email、:name等列
。电子邮件不是唯一的。我想要的是添加一个可链接的范围
,它选择具有不同电子邮件但具有所有其他字段的行。“可链接”是指我可以这样做:Account.uniq\u By\u email.where(bla-bla)
我所尝试的:
选择:
def self.uniq_by_email
select('distinct email')
end
不适用于我,因为它只选择电子邮件字段
组一起
def self.uniq_by_email
group(:email)
end
这几乎就是我想要的:我可以链接,它选择所有字段。但是count
方法有一个奇怪的地方:正如您已经猜到的,它返回电子邮件计数的散列。但是我想让它返回“simple”ActiveRecord\u 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)
我的基本想法是在每组电子邮件中只选择第一个条目。 简单一点,我创建了这样一个范围,而不是使用类方法:
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)
好吧,你可以用分组方式,但你可以算作
Account.uniq_by_email.where(bla bla).flatten.count
好吧,你可以用分组方式,但你可以算作
Account.uniq_by_email.where(bla bla).flatten.count
是的,当然,但这不是我的解决办法。此
uniq\u by_email
用于根据条件进行多步骤过滤。因此,在查询结束时,我不想发现是否调用了uniq\u by\u email
。我只是想确定找到的记录的数量,但这不是我的解决方案。此uniq\u by_email
用于根据条件进行多步骤过滤。因此,在查询结束时,我不想发现是否调用了uniq\u by\u email
。我只想得到找到的recordstx的数量,这就是我在找的fortx,这就是我在找的