2010-06-01 15 views
5

मैं शीर्ष n श्रेणियों की संख्या के साथ श्रेणियों की संख्या को खोजने का प्रयास कर रहा हूं, दोनों के बीच एक आवास संबंध स्थापित है। यह SQL है जिसे मैं निष्पादित करना चाहता हूं, लेकिन find_by_sql विधि का उपयोग करने के अलावा, ActiveRecord के साथ ऐसा करने के बारे में अनिश्चित हूं।उन्नत गणना और रेल में शामिल हों

SELECT 
    "categories".id, 
    "categories".name, 
    count("articles".id) as counter 
FROM "categories" 
JOIN "articles_categories" 
    ON "articles_categories".category_id = "categories".id 
JOIN "articles" 
    ON "articles".id = "articles_categories".article_id 
GROUP BY "categories".id 
ORDER BY counter DESC 
LIMIT 5; 

उत्तर

9

आप विकल्पों के साथ find उपयोग कर सकते हैं एक ही क्वेरी को प्राप्त करने के: वहाँ ActiveRecord तरीकों के साथ ऐसा करने का किसी भी तरह से है

Category.find(:all, 
    :select => '"categories".id, "categories".name, count("articles".id) as counter', 
    :joins => :articles, 
    :group => '"categories".id', 
    :order => 'counter DESC', 
    :limit => 5 
) 
+0

बहुत बढ़िया धन्यवाद, सोचा था कि मुझे लगता है कि कोशिश की, लेकिन स्पष्ट रूप से मैं कुछ गलत था यह – trobrock

+0

बाद में गिनती मूल्य तक पहुंचने का कोई तरीका है? 'श्रेणी = श्रेणी। ढूँढें (...) पहले; category.counter'? –

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