2011-08-05 51 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,我正想来执行其他查询以显示意见和发布它的用户。

我遇到的问题是,我无法找出一种方法来排序ups的数量的意见(如果这是有道理的)。

我知道有count(*)和group by,但我似乎无法弄清楚如何将它整合到声明中的顺序中。

我一直在考虑子查询,但只允许在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

这似乎工作正常。我非常感谢帮助。唯一的问题是我必须针对顶级意见运行三个查询,但我想这是无法避免的(必须找到意见和帐户,以便我可以显示它们)。 – Brian