2011-10-11 21 views
8

find_in_batches में find_in_batches_by_sql जैसे कुछ मैं कैसे कर सकता हूं शुद्ध SQL (जहां तक ​​मैं देख सकता हूं) की अनुमति नहीं देता है।
find_by_sql में बैच समर्थन नहीं है (जहां तक ​​मैं देख सकता हूं)।रेलवे

तो मैं find_in_batches_by_sql जैसे कुछ कैसे कर सकता हूं?

एसक्यूएल प्रोग्रामिंग रूप से जेनरेट की गई सामग्री है और यह तीसरे पक्ष के डेटाबेस को इंगित करता है और परिणाम सेट में लाखों रिकॉर्ड लाखों रिकॉर्ड हो सकते हैं।

क्या ActiveRecord के साथ अन्य कर्सर चालें मुझे देखना चाहिए?

धन्यवाद।

उत्तर

4

तुम हमेशा भागों में एसक्यूएल तोड़ने के लिए और

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

की तरह कुछ करना या यदि आप वास्तव में मज़ा एसक्यूएल सामान की जरूरत है जब तक आप परिणाम समाप्त हो तुम सिर्फ एक ऑफसेट और सीमा और पाश इस्तेमाल कर सकते हैं कर सकते हैं। यहाँ मूल विचार है:

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 
संबंधित मुद्दे