2010-11-23 11 views
5

द्वारा क्रमबद्ध फ़ील्ड मैं create_at desc द्वारा क्रमबद्ध कॉलम द्वारा समूहित सभी रिकॉर्ड्स का चयन कैसे करूं।रेल 3: समूह =>: create_at desc

मैं प्रत्येक लेख के लिए सभी नवीनतम टिप्पणियां पुनर्प्राप्त करना चाहूंगा। इससे कोई फर्क नहीं पड़ता कि मैं समूह (: article_id) क्या करता हूं, हमेशा सबसे पुरानी टिप्पणी वापस कर दूंगा।

सर्वश्रेष्ठ संबंध। Asbjørn Morell

उत्तर

3

आप एसक्यूएल के साथ एक आसान जवाब नहीं मिलेगा - समूह प्रकार से पहले होता है (के बाद से समूह कुल डेटा के लिए आम तौर पर होता है)। अपने आलेख रिकॉर्ड पर बस latest_comment_id फ़ील्ड रखें, और फिर जब आप अपने लेख ढूंढें तो नवीनतम_comment_id पर टिप्पणियां शामिल हों।

यदि आप प्रति लेख एकाधिक टिप्पणियां चाहते हैं, तो आपको प्रति लेखों की नवीनतम टिप्पणियों के साथ या तो कई प्रश्नों का उपयोग करने या एक टेम्पलेट तालिका बनाए रखने का सहारा लेना होगा।

16

कुछ की तरह:

Comment.order('created_at DESC').all 

कि यह करना चाहिए :)

तुम सिर्फ पहला परिणाम चाहते हैं, first बजाय all का उपयोग करें। आप limit का भी उपयोग कर सकते हैं। उदाहरण बातें पहली बार 5 परिणाम पाने के लिए:

Comment.order('created_at DESC').limit(5).all 
+0

लेकिन आप प्रत्येक लेख के लिए एकाधिक रिकॉर्ड चुनने से कैसे बचते हैं? मुझे प्रत्येक आलेख के लिए एक टिप्पणी की आवश्यकता है - जिस पर बनाया गया है। – atmorell

+0

अच्छी तरह से मुझे यकीन नहीं है कि आप केवल रेल सहायतागार के साथ ही कर सकते हैं। यह काफी जटिल लग रहा है! मैंने Google पर कुछ शोध किया है और मैंने पाया है कि: http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/ । क्या आप यह करने की कोशिश कर रहे हैं? जो भी हो, अगर आपको कोई मिल जाए तो कृपया अपना समाधान पोस्ट करें;) –

+0

वही है जो मैं करने की कोशिश कर रहा हूं। मेरे लेख मॉडल में नवीनतम_comment_id कॉलम के साथ समाधान के लिए जाना होगा। – atmorell

1
Comment.group(:article_id).order('created_at DESC') 
+1

काम नहीं करेगा। क्वेरी article_id द्वारा समूहीकृत सभी टिप्पणियों का चयन करेगी, लेकिन समूह भाग के बाद ऑर्डरिंग होगी - आपको सबसे पुरानी टिप्पणी मिल जाएगी। – atmorell

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