2010-11-15 10 views
6

का उपयोग कर "शीर्ष एक्स" रिकॉर्ड्स को पुनर्प्राप्त करने का सबसे प्रभावी तरीका हमें एक रिपोर्ट अनुरोध प्राप्त हुआ है, और मैं संख्याओं को खींचने का सबसे आसान और सबसे प्रभावी तरीका खोजने का प्रयास कर रहा हूं। _quantity_purchased_ और कीमत:रेल

मैं दो विशेषताओं के साथ एक डील मॉडल है। मुझे डेटाबेस में शीर्ष 100 सर्वश्रेष्ठ बिकने वाले सौदों की एक सूची पुनर्प्राप्त करने के लिए कहा गया है। यह देखने के लिए कि एक सौदा कितना अच्छा है, हम कीमत से मात्रा_पुर्धारित गुणा करते हैं।

अब, मुझे यकीन है कि मैं अपने परिणाम प्राप्त करने के लिए कुछ लिख सकता हूं, लेकिन ऐसा लगता है कि ऐसा करने का एक आसान तरीका है। क्या कुछ ऐसा है जो मैं MySQL में कर सकता हूं, या रूबी/रेल का उपयोग कर सकता हूं? या मैं किसी प्रकार का अप्रिय लूप ढूंढ रहा हूं?

एफवाईआई, हम रेल 2.3 चला रहे हैं।

उत्तर

9

आप लौटाए गए परिणामों की संख्या को सीमित करने के लिए find विधि पर :limit पैरामीटर पास कर सकते हैं। एक :order पैरामीटर के साथ संयुक्त, आप 'शीर्ष' 100 परिणाम प्राप्त कर सकते हैं:

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

रेल 3 के रूप में ध्यान दें, इस क्वेरी लिखने की सही तरीका होगा

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

समस्या यह है कि मुझे "शीर्ष" परिणाम प्राप्त करने के लिए कुछ गणित करना है। यह गणना करने के लिए कि एक सौदा कितना राजस्व है, मुझे कीमत से मात्रा_पुर्धारित करना होगा। एक सौदा जो केवल 5 बेचा गया हो, उसने 50 से बेचे गए एक से अधिक धन कमाया होगा। –

+0

गह! बस अपना कोड जोड़ देखा। मैं इसे आज़मा दूंगा। –

+1

@ केविन आप 'ऑर्डर' खंड में गणित कर सकते हैं। – meagar

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

यही चाहिए कर दो। MySQL में आप चुनिंदा सूची में पहले कॉलम द्वारा क्रमबद्ध करने के लिए "ORDER BY 1" का उपयोग कर सकते हैं और इसी तरह।