0

我正在尝试呈现按他们投票排序的前 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 上根本无法使用。寻找有关这可能是什么的一些见解,或者只是实现同一目标的另一种方法。干杯

4

1 回答 1

1

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

于 2013-07-03T12:35:15.887 回答