Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

रेल - कई रिश्तों में डेटा को कुशलता से खींच और गणना करता है

एक से अधिक खरीदारी वाली उपयोगकर्ता आईडी की सूची प्राप्त करने के लिए, आप निम्न कार्य कर सकते हैं, जो केवल एक तालिका तक पहुंचेगा:

user_ids = PurchasedDeal.count(:group => :user_id, :having => 'count_all > 0').keys

इसके बाद, आप इन सभी उपयोगकर्ताओं को इसके साथ ला सकते हैं:

users = User.find user_ids

काउंटर कैश के साथ चीजों को तेज किया जा सकता है। अपने उपयोगकर्ता मॉडल में, विकल्प जोड़ें :counter_cache => true करने के लिए has_many खरीदे गए सौदों के लिए एसोसिएशन। आपको अपनी उपयोगकर्ता तालिका और इनिशियलाइज़ पर एक अतिरिक्त पूर्णांक कॉलम की आवश्यकता होगी, जो माइग्रेशन में इस प्रकार दिखाई दे सकता है:

add_column :users, :purchased_deals_count, :integer, :null => false, :default => 0
User.each { |u| User.reset_counters u, :purchased_deals }

एक बार जब यह रास्ते से हट जाता है, तो यह बहुत आसान हो जाता है:

users = User.all :conditions => 'purchased_deals_count > 0'

अधिकांश मानक संचालन के साथ रेल आपके लिए कॉलम को अप-टू-डेट रखेंगे।

कुल मूल्य प्राप्त करने के लिए हमेशा शामिल होना शामिल होगा। या आप सौदे की कीमतों का एक हैश बना सकते हैं और रूबी में थकाऊ प्रसंस्करण कर सकते हैं। मैं कोई SQL विशेषज्ञ नहीं हूं, लेकिन आप खरीददारी डील के साथ मूल्य संग्रहीत करके संभावित रूप से शामिल होने से छुटकारा पा सकते हैं। अन्यथा, यहां शामिल होने के साथ इसे करने का तरीका बताया गया है:

user_id_to_price = PurchasedDeal.sum 'deal.price', :include => :deal, :group => :user_id

आप :conditions => ['user_id IN (?)', users] जैसे कुछ जोड़कर केवल उन उपयोगकर्ताओं पर फ़िल्टर कर सकते हैं जिन्हें आप चाहते हैं। . (जहां users आईडी की सूची हो सकती है, लेकिन उपयोगकर्ता ऑब्जेक्ट भी।)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL टेबल स्टेटमेंट

  2. क्या हम mysql में प्रक्रियाओं के बाहर कर्सर घोषित कर सकते हैं?

  3. मैं पर्ल के डीबीआई का उपयोग करके एसक्यूएल इंजेक्शन हमलों के खिलाफ कैसे रक्षा कर सकता हूं?

  4. MySQL IFNULL अन्य

  5. MySql - एकाधिक तालिकाओं से पढ़ने के लिए दृश्य बनाएं