`
Hooopo
  • 浏览: 330441 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

DISTINCT in ActiveRecord

    博客分类:
  • SQL
阅读更多

有的时候需要在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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics