如何根据投票订购商品

时间:2013-07-03 11:53:57

标签: sql ruby-on-rails postgresql

我正在尝试渲染他们投票所排序的前10张照片列表,这就是我决定这样做的方式:

@top_photos = Photo.all(:joins => :votes, :select => "photos.*, count(*) as vote_total",:group => "votes.photo_id", :order => "vote_total DESC" )#, :limit => 10)

但是我从heroku日志中收到以下错误:

ActiveRecord::StatementInvalid (PGError: ERROR:  column "photos.id" must appear in the GROUP BY clause or be used in an aggregate function

使用sqlite在localhost上查找工作,但在heroku上使用postgres完全不起作用。寻找有关这可能是什么的一些见解或只是另一种方法来实现相同的事情。 干杯

1 个答案:

答案 0 :(得分:1)

大多数数据库不允许选择未包含在GROUP BY语句,SQLite和MySQL中的非聚合列。这不是一个真正讨论哪一个更好的地方,但简短的答案是:在group by子句中包含每个非聚合列(照片表中的每一列都是基本的)。您还需要停止使用*,因为如果添加了新列,这将破坏您的查询。