[Ruby-On-Rails] रेल: कॉलम से अद्वितीय मान चुनें



Answers

यदि आप Model.select का उपयोग करने जा रहे हैं, तो आप केवल DISTINCT उपयोग कर सकते हैं, क्योंकि यह केवल अद्वितीय मान लौटाएगा। यह बेहतर है क्योंकि इसका मतलब है कि यह कम पंक्तियां देता है और कई पंक्तियों को वापस करने से पहले थोड़ा तेज होना चाहिए और फिर रेल को अद्वितीय मूल्य चुनने के लिए कहना चाहिए।

Model.select('DISTINCT rating')

बेशक, यह प्रदान किया जाता है कि आपका डेटाबेस DISTINCT कीवर्ड को समझता है, और सबसे अधिक चाहिए।

Question

मेरे पास पहले से ही एक समाधान समाधान है, लेकिन मैं वास्तव में जानना चाहता हूं कि यह क्यों काम नहीं करता है:

ratings = Model.select(:rating).uniq
ratings.each { |r| puts r.rating }

यह चुनता है, लेकिन अद्वितीय मान मुद्रित नहीं करता है, यह डुप्लिकेट समेत सभी मानों को प्रिंट करता है। और यह प्रलेखन में है: http://guides.rubyonrails.org/active_record_querying.html#selecting-specific-fields




Model.select(:rating).distinct



यदि आप अतिरिक्त फ़ील्ड भी चुनना चाहते हैं:

Model.select('DISTINCT ON (models.ratings) models.ratings, models.id').map { |m| [m.id, m.ratings] }



Model.uniq.pluck(:rating)

# SELECT DISTINCT "models"."rating" FROM "models"

इसमें एसक्यूएल तारों का उपयोग न करने और मॉडलों को तुरंत चालू करने के फायदे हैं




अगर मैं रास्ते में जा रहा हूं तो:

वर्तमान क्वेरी

Model.select(:rating)

ऑब्जेक्ट की सरणी लौटा रहा है और आपने लिखित क्वेरी लिखी है

Model.select(:rating).uniq

यूनिक ऑब्जेक्ट की सरणी पर लागू होता है और प्रत्येक ऑब्जेक्ट में अद्वितीय आईडी होती है। uniq अपनी नौकरी सही ढंग से कर रहा है क्योंकि सरणी में प्रत्येक वस्तु uniq है।

अलग रेटिंग चुनने के कई तरीके हैं:

Model.select('distinct rating').map(&:rating)

या

Model.select('distinct rating').collect(&:rating)

या

Model.select(:rating).map(&:rating).uniq

या

Model.select(:name).collect(&:rating).uniq

एक और बात, पहली और दूसरी क्वेरी: एसक्यूएल क्वेरी द्वारा अलग डेटा खोजें।

इन प्रश्नों को "लंदन" और "लंदन" माना जाएगा, इसका मतलब है कि यह अंतरिक्ष की उपेक्षा करेगा, यही कारण है कि यह आपके प्रश्न परिणाम में एक बार 'लंदन' का चयन करेगा।

तीसरी और आगे पूछताछ:

एसक्यूएल क्वेरी द्वारा डेटा ढूंढें और अलग-अलग डेटा के लिए लागू रूबी uniq mehtod। इन प्रश्नों को "लंदन" और "लंदन" अलग माना जाएगा, यही कारण है कि यह आपके प्रश्न परिणाम दोनों में 'लंदन' और 'लंदन' का चयन करेगा।

कृपया अधिक समझने के लिए संलग्न छवि को प्राथमिकता दें और "टर्न / प्रतीक्षा आरएफपी" पर एक नज़र डालें।




Links