2011-10-11 34 views
8

find_in_batches không cho phép SQL thuần túy (cho đến nay tôi có thể thấy).
find_by_sql không có hỗ trợ hàng loạt (cho đến thời điểm này tôi có thể thấy).Làm cách nào tôi có thể thực hiện điều gì đó như find_in_batches_by_sql trong Rails

Vậy làm cách nào tôi có thể làm điều gì đó như find_in_batches_by_sql?

SQL là công cụ tạo lập trình khó chịu và nó trỏ đến cơ sở dữ liệu bên thứ ba và tập hợp kết quả có thể có hàng trăm nghìn đến hàng triệu bản ghi được trả về.

Có các thủ thuật con trỏ khác với ActiveRecord mà tôi nên xem xét không?

Cảm ơn.

Trả lời

4

Bạn luôn có thể phá vỡ các SQL vào các bộ phận và làm điều gì đó như

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

Hoặc nếu bạn cần thực sự thú vị thứ SQL bạn chỉ có thể sử dụng một bù đắp và hạn chế và vòng lặp cho đến khi bạn kiệt sức kết quả. Dưới đây là ý tưởng cơ bản:

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

Lưu ý bù đắp nên sau khi hạn chế

offset = 0 
limit = 1000 

while(results) 
    results = Model.find_by_sql("<your SQL here> LIMIT #{limit} OFFSET #{offset}") 
    offset += limit 
    # Do stuff here 
end 
Các vấn đề liên quan