欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DISTINCT in ActiveRecord

程序员文章站 2022-07-04 21:16:26
...

有的时候需要在SQL里面加上distinck来过滤一些重复的记录,使用SQL比较好写,但是在Rails的API里面并没有找到DISTINCK的参数,于是google了一把,看到不少人有类似的需求,最后找到方案,整理如下:
1、使用:select

Item.find( :all, :select => 'DISTINCT fieldname1,filename2,filename3' ),这里就可以使用DISTINCT参数但是你可能很郁闷的发现,这
样select出来的结果并不完全符合您的要求或者预想,呵呵。

2、加上:group参数
前面说的,如果只有:select参数,这样出来的结果可能会让你郁闷的发现,并不是您的预期,原因是前面的:select会对
“fieldname1,filename2,filename3”做DISTINCT,所有不满足您的预期;
我们可以再加上group参数即可,类似语句如下:
Item.find( :all, :select => 'DISTINCT fieldname1,filename2,filename3' ,:group => 'fieldname1')

最后还要说下这个:select参数,他可以很好的提高性能,因为在Rails中的find会把所有字段都select出来,如果遇到大字
段会很影像性能的,所有在必要的时候,最好是用:select限制下要取出的列。

参考:
1、Using :select in Rails for Better Performance (这篇文章详细的说了使用select来提高性能)
2、说Mysql的distinct语句和group by,order by (这篇文章说了distinct、group by和order by的关系)

via:http://iceskysl.1sters.com/?action=show&id=297