2011-10-11 53 views
8

find_in_batches不允许纯SQL(据我所见)。
find_by_sql没有批处理支持(据我所知)。如何在Rails中执行类似find_in_batches_by_sql的操作

那么我该如何做点像find_in_batches_by_sql

SQL是讨厌的编程式生成的东西,它指向第三方数据库,结果集可能有成千上万到数百万记录返回。

是否有其他光标技巧与ActiveRecord我应该看看?

谢谢。

回答

4

你总是可以打破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> OFFSET #{offset} LIMIT #{limit}") 
    offset += limit 
    # Do stuff here 
end 
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