2011-08-05 9 views
1

개인 사이트에 대한 쿼리를 작성하려고합니다. 사용자가 다른 사용자의 의견을 게시하고 평가할 수있는 곳에 구축하고 있습니다. 등급 평가와 관련하여 사용자가 의견을 위 또는 아래로 평가할 수 있도록 등급을 매긴 다음 평가 된 의견에 대해 두 개의 개별 페이지를 표시하고 최고 점수로 하위 주문을 평가하고 싶습니다.Ruby on Rails 쿼리

OpinionsRatings 사이에 다 대다 관계가 있습니다. 그들은 OpinionRatings이라는 테이블에 의해 결합됩니다.

@topUpRatings = Rating.find(
    :all, 
    :select => "opinion_ratings.opinion_id, opinion_ratings.account_id", 
    :joins => "inner join opinion_ratings on ratings.id=opinion_ratings.rating_id", 
    :conditions => ["ratings.up=?", true] 
) 

이 내가 추가 쿼리를 수행하는 데 사용할 거라고 각각의 의견 ID와 계정 ID를 반환

나는 다음 인까지 평가 된 의견이있는 페이지에 대한 쿼리를 작성했습니다 의견을 게시하고 사용자에게 게시합니다.

내가 겪고있는 문제는 의견 수를 기준으로 의견을 분류 할 수있는 방법을 찾지 못했다는 것입니다.

저는 count(*)과 그룹별로 알고 있지만 순서에 따라 명령을 통합하는 방법을 알아낼 수 없습니다.

하위 쿼리는 생각해 봤지만 select, from 및 where에서만 허용됩니다.

도움을 주시면 감사하겠습니다. 더 자세한 정보가 필요하면 질문하십시오.

답변

0
@topUpRatings = Rating.find(
    :all, 
    :select  => "opinion_ratings.opinion_id, count(opinion_ratings.account_id)", 
    :joins  => "inner join opinion_ratings on ratings.id=opinion_ratings.rating_id", 
    :conditions => ["ratings.up=?", true] 
    :group_by => "opinion_ratings.opinion_id" 
    :order_by => "count(opinion_ratings.account_id) DESC" 
) 

저는 구문에 대해 확실하지 않지만 아이디어를 얻으려고했습니다.

+0

잘 작동하는 것 같습니다. 도움에 정말 감사드립니다. 유일한 문제는 상위 3 개 질문을 실행해야하지만 피할 수없는 것 같아요 (의견을 표시하고 계정을 표시해야만 표시 할 수 있습니다). – Brian