我正在尝试为我正在构建的个人网站撰写查询,用户可以在其中发布并评价其他人的意见。关于评级意见,我有这个意见,所以用户可以向上或向下评价意见,然后我想显示两个单独的页面,评论意见和评级最低的顺序。
Opinions
和Ratings
之间存在多对多关系。它们通过名为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(*)
和group by,但我似乎无法弄清楚如何将其整合到一个按语句排列。
我一直在考虑子查询,但这些只能在select,from和where中使用。
任何帮助将不胜感激。如果您需要更多信息,请询问。
答案 0 :(得分: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"
)
我不确定语法,但试图了解这个想法。