2016-03-27 18 views
-1

Ben, (bir kapsam yapmak) Raylar aşağıdaki SQL oluşturmak için bir yol arıyorum:İçiçe SQL SEÇ 4

SELECT *, cs.count 
FROM articles, (
    SELECT article_id, count(*) 
    FROM comments 
    GROUP BY comments.article_id 
) cs 
WHERE articles.id = cs.article_id 
ORDER BY cs.count DESC; 

Ben Article.joins(:comments).select('*').group('comments.article_id') çizgisinde bir şey denedim ama istenen SQL oluşturmaz:

SELECT * FROM "articles" 
INNER JOIN "comments" ON "comments"."article_id" = "articles"."id" 
GROUP BY comments.article_id 

(PSQL): PG::GroupingError: ERROR: column "articles.id" 
     must appear in the GROUP BY clause or be used in 
     an aggregate function 

Ve iç içe SQL SELECT belirtebilirsiniz hangi bir .from yöntem olacaksa görünmüyor .

cevap

1

Aslında bir .from method var:

scope :most_comments, -> { 
    Article.select('*, cs.count').from(
    'articles, (
     SELECT article_id, count(*) 
     FROM comments 
     GROUP BY comments.article_id 
    ) cs' 
    ) 
    .where('articles.id = cs.article_id') 
    .order('cs.count DESC') 
} 

en iyi yolu budur emin değilim ama işe yarıyor ...