В Oracle я написал бы следующее:
YourModel.find(:conditions => 'MOD(ROWNUM,3) = 0')
это имеет то преимущество, что фильтр происходит в базе данных, поэтому не все извлекаются.
В PostgreSQL это называетсяROW_NUMBER
(на самом деле это стандарт SQL).В MySQL это не поддерживается.
В MySQL вы можете имитировать rownum, используя 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")
должно работать.