2010-11-15 37 views
6

Chúng tôi đã nhận được yêu cầu báo cáo và tôi đang cố gắng tìm ra cách dễ nhất và hiệu quả nhất để lấy số.Cách hiệu quả nhất để truy xuất bản ghi "đầu x" bằng Rails

Tôi có một mô hình Thỏa thuận với hai thuộc tính: _quantity_purchased_ và giá. Tôi đã được yêu cầu lấy danh sách 100 giao dịch bán chạy nhất trong cơ sở dữ liệu. Để xem giao dịch đã thực hiện tốt như thế nào, chúng tôi nhân số lượng_purchased với giá.

Bây giờ, tôi chắc chắn rằng tôi có thể viết một cái gì đó phức tạp để có được kết quả của tôi, nhưng điều này có vẻ như một hoạt động đơn giản, rằng đã có được một cách dễ dàng hơn để làm điều đó. Có cái gì tôi có thể làm trong MySQL, hoặc sử dụng Ruby/Rails? Hay tôi đang tìm kiếm một số loại vòng lặp khó chịu?

FYI, chúng tôi đang chạy Rails 2.3.

Trả lời

9

Bạn có thể chuyển thông số :limit cho phương pháp find của mình để giới hạn số lượng kết quả được trả lại. Kết hợp với một tham số :order, bạn có thể nhận được 'đỉnh' 100 kết quả:

Deal.find(:all, :order => 'quantity_purchased * price', :limit => 100); 

Note như của Rails 3, cách chính xác của văn bản truy vấn này sẽ là

Deal.order('quantity_purchased * price').limit(100) 
+0

Vấn đề là tôi phải thực hiện một số phép tính để có được kết quả "hàng đầu". Để tính số tiền doanh thu mà một giao dịch đã thực hiện, tôi phải nhân số lượng_purchased với giá. Một giao dịch chỉ bán được 5, có thể kiếm được nhiều tiền hơn số tiền bán 50. –

+0

Gah! Chỉ cần nhìn thấy phần bổ sung mã của bạn. Tôi sẽ thử. –

+1

@Kevin bạn có thể thực hiện phép toán theo mệnh đề ': order'. – meagar

1
class Deal < ActiveRecord::Base 
    named_scope :top_deals, :select => 'quantity_purchased * price', :order => '1 DESC', :limit => 100 
end 

Đó nên làm đi. Trong MySQL bạn có thể sử dụng "ORDER BY 1" để sắp xếp theo cột đầu tiên trong danh sách lựa chọn và cứ thế.

Các vấn đề liên quan