2012-09-21 9 views
10

में दोनों महीने और वर्ष के समूह के रिकॉर्ड मैं रूबी 1.9.2, रेल 3.0.x पर हूं और मैं MySQL डीबी का उपयोग करता हूं। मेरे पास एक संदेश मॉडल है, जहां कोई भी हर दिन नए संदेश पोस्ट कर सकता है।रेल

मेरे पास एक इंडेक्स एक्शन है जहां मैं इन संदेशों को महीने और वर्ष दोनों द्वारा समूहीकृत करना चाहता हूं। यह मूल रूप से संदेशों को फ़िल्टर करने के लिए प्रयोग किया जाता है।

मेरे क्वेरी इस तरह दिखता है: -

@active_msgs = Messages.where('expiry > ?', Time.now).order('created_at DESC') 

मैं रेल में group_by फ़ंक्शन का उपयोग किया, this post

मेरे समूह के आधार पर क्वेरी की चर्चा करते हुए के बाद है: -

@msgs_by_month = @active_msgs.all.group_by {|u| u.created_at.month } 

मैं था @msgs_by_month नामक एक हैश लौटा दिया। यह मैं समूह माह से संदेशों में मदद मिली है, लेकिन मैं, सितम्बर 2011 और Sept 2012

मेरे वर्तमान कुंजी, एक अद्वितीय कुंजी बनाने के लिए, के रूप में यह मेरे जैसे के लिए के बीच अंतर करने में मदद मिलेगी साल को ध्यान में रखा करने की जरूरत है सितंबर के महीने के लिए केवल हैश [महीना] (उदाहरण के लिए हैश [9] => प्रकार का है, मैं सभी उपयुक्त मान प्रदर्शित कर सकता हूं)। मैं महीने की एक अनूठी कुंजी कैसे प्राप्त कर सकता हूं, जिस साल मैं आसानी से लूप कर सकता हूं, हालांकि निर्माण और निर्माण के वर्ष के अनुसार सभी रिकॉर्ड प्रदर्शित किए जाएंगे।

धन्यवाद

संपादित: -

मैं एक तरह से यह करने के लिए अनुमान लगा रहा हूँ, उपयोग created_at.to_date एपीआई बनाने के लिए है, here प्रदान की है। मैं केवल आश्चर्य, मैं कैसे created_at.to_date से दिन को निकाल देते हैं एक अद्वितीय माह और वर्ष संयोजन कुंजी प्राप्त करने के लिए कर सकते हैं जो कर सकते थे group_by समारोह साथ काम करते हैं।

+0

[ब दिन/माह/वर्ष MySQL क्वेरी ग्रुप] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/508791/mysql-query-group-by-day-month- वर्ष) – noodl

+0

नहीं, डुप्लिकेट नहीं। जिस क्यू का आप जिक्र कर रहे हैं वह केवल MYSQL- संबंधित है जहां यह क्यू रेल + mysql है .. – Philip

उत्तर

29

एसक्यूएल में:

select * from messages group by year(created_at), month(created_at); 

रेल में:

Message.all.group_by { |m| m.created_at.beginning_of_month } 
+0

धन्यवाद दोस्त .. :)। यह तब काम करता है जब मैं क्वेरी में कहां दर्ज करता हूं .. बस सभी की जानकारी के लिए .. – boddhisattva

1

उपयोग समूह की तारीख।

यह समय क्षेत्र का समर्थन करता है, इसलिए यदि आपको कभी भी आवश्यकता है - कोड आसानी से विकसित होगा।

https://github.com/ankane/groupdate

0
Message.select("date_trunc('month', created_at) as month").group("month")