find_in_batches
不允许使用纯SQL(据我所见)
find_by_sql
没有批量支持(据我所知)。
那么我怎样才能做find_in_batches_by_sql
?
SQL是令人讨厌的编程生成的东西,它指向第三方数据库,结果集可以返回数十万到数百万条记录。
我应该研究一下ActiveRecord的其他光标技巧吗?
感谢。
答案 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