我怎样才能在Rails中执行类似find_in_batches_by_sql的操作

时间:2011-10-11 16:48:32

标签: sql ruby-on-rails activerecord

find_in_batches不允许使用纯SQL(据我所见) find_by_sql没有批量支持(据我所知)。

那么我怎样才能做find_in_batches_by_sql

之类的事情

SQL是令人讨厌的编程生成的东西,它指向第三方数据库,结果集可以返回数十万到数百万条记录。

我应该研究一下ActiveRecord的其他光标技巧吗?

感谢。

2 个答案:

答案 0 :(得分:5)

已更新为使用LIMIT和OFFSET的正确顺序

您可以随时将SQL分解为多个部分并执行类似

的操作
Model.select("*").where("WHERE CLAUSE HERE").joins("JOIN CLAUSES HERE").find_in_batches {...}

或者,如果您需要非常有趣的SQL内容,您可以使用偏移量并限制和循环,直到您用尽结果。这是基本的想法:

offset = 0
limit = 1000

while(results)
  results = Model.find_by_sql("<your SQL here> LIMIT #{limit} OFFSET #{offset}")
  offset += limit  
  # Do stuff here
end

答案 1 :(得分:1)

注意偏差应在限制

之后
offset = 0
limit = 1000

while(results)
  results = Model.find_by_sql("<your SQL here>  LIMIT #{limit} OFFSET #{offset}")
  offset += limit  
  # Do stuff here
end