2013-03-29 6 views
5

मैं काफी नया करने के लिए कर रहा हूँ रेल और एसक्यूएल प्रकार भाषाओं के साथ सीमांत अनुभव है।MySQL 2 का उपयोग कर रेल 3 परियोजना में WHERE IN का उपयोग कैसे करें?

मैं एक रेल 3 एक MySQL2

का उपयोग कर परियोजना पर काम कर रहा हूँ मैं यहाँ एक सामान्य एसक्यूएल बयान है कि मैं अपने डेटाबेस के दोनों पर काम करना चाहता है। क्या ActiveRecord कार्यक्षमता के माध्यम से ऐसा करने का कोई तरीका है?

SELECT * FROM MyRecords 
WHERE (f1, f2, f3, f4) IN (
    SELECT f1, f2, f3, f4 
    FROM MyRecords 
    GROUP BY f1, f2, f3, f4 
    HAVING count(*) = 1 
); 

दूसरे शब्दों में, मैं एक "कहां में" बयान पर अमल (और खुलकर होने के लिए, मैं भी नहीं पता है कि एक कहां में बयान करता है, इस सवाल का जवाब मैं क्या आवश्यकता है सिर्फ इतना है कि करने के लिए कोशिश कर रहा हूँ: ?

def MyRecordFunction 
    MyRecords.where('org_id=?', self.org_id).order('f4') 
    end 

धन्यवाद: मैं कैसे (या मैं कर सकते हैं) एकाधिक स्तंभों (PostgreSQL) पर DISTINCT का चयन करते हैं) और अधिक विशिष्ट होना करने के लिए, मैं निम्नलिखित ActiveRecord समारोह इतना है कि यह ऊपर क्वेरी करता है बढ़ाने के लिए की है।

+0

एक MySQL इन क्लॉज बस एक समावेशी है या। ईजी: जहां यह ('1', '2', '3') ऐसा करने जैसा ही है। यह कहां = '1' या यह = '2' या यह = '3' http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_in – fyrye

उत्तर

0

इस प्रयास करें:

MyRecord.joins("JOIN 
    (
    SELECT f1, f2, f3, f4 
    FROM my_records 
    GROUP BY f1, f2, f3, f4 
    HAVING count(*) = 1 
) a ON a.f1 = my_records.f1 AND 
     a.f2 = my_records.f2 AND 
     a.f3 = my_records.f3 AND 
     a.f4 = my_records.f4") 
27

मैं थोड़ा उलझन में हूँ, लेकिन मुझे लगता है कि यह है कि क्या आप के लिए देख रहे हैं: के अंदर

MyRecord.where(:org_id => [1, 2, 3]).order('f4') 

बयान में जहां विशेष के लिए देखो कुछ फ़ील्ड के लिए मान, ऊपर दिए गए उदाहरण में, क्वेरी mY_records तालिका में रजिस्टर की तलाश करेगी जहां org_id में 1,2 या 3.

चेक यह बाहर: http://guides.rubyonrails.org/active_record_querying.html

अद्यतन: मैं समझता हूं, हरीश शेट्टी का मुद्दा है।

संबंधित मुद्दे