我想做一个查询,从中选择一堆数据,但是我希望能够通过仅选择每三个记录,甚至每个百分之一的记录来降低数据的分辨率。任何。
有什么简单的方法可以用ActiveRecord做到这一点吗?
在Oracle中,我将其编写如下:
YourModel.find(:conditions => 'MOD(ROWNUM,3) = 0')
这样做的好处是,过滤器发生在数据库中,因此不会检索所有内容。
在PostgreSQL中,这称为ROW_NUMBER(实际上是SQL标准)。在MySQL中,不支持此功能。
ROW_NUMBER
在mysql中,您可以使用来模仿rownum SELECT @rownum:=@rownum+1 rownum, t.* FROM (SELECT @rownum:=0) r, mytable t;。所以我猜像
SELECT @rownum:=@rownum+1 rownum, t.* FROM (SELECT @rownum:=0) r, mytable t;
Bar.find_by_sql("select * from (SELECT @rownum:=@rownum+1 rownum, t.* FROM (SELECT @rownum:=0) r, mytable t) where mod(rownum,3) = 0")
应该管用。