2011-10-11 54 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