【发布时间】:2011-04-20 23:16:21
【问题描述】:
我想构建一个搜索查询,按记录的“标签”属性对记录进行分组,并为每个标签组找到一定数量的记录。我的“地方”表如下:
| ID | name | geom | rating_av | tag |
可以为一个地点分配四种不同的标签——“城市”、“食物”、“酒店”和“景点”。我希望我的搜索能够返回每个标签组的前五条记录,按rating_av 排序,并带有额外的几何约束。我可以使用以下命令一次查询每个标签(这似乎工作正常):
Place.find(:all, :limit => 5, :conditions => ["geom && ? and tag = ?", Polygon.from_coordinates([[[xMinLng, yMinLat], [xMinLng, yMaxLat], [xMaxLng, yMaxLat], [xMaxLng, yMinLat], [xMinLng, yMinLat]]], 4326), "food"])
但是,我希望能够在单个查询中检索每个标签的前五条记录。构建这样一个查询的最佳方法是什么?我是否应该考虑将“标签”列添加为索引以帮助搜索?我尝试将:group => 'tag' 添加到查询中,但我不太确定如何正确使用它,因为我得到了以下错误:
ActiveRecord::StatementInvalid (PGError: ERROR: column "places.id" must appear in the GROUP BY clause or be used in an aggregate function
非常感谢任何帮助,谢谢!
【问题讨论】:
标签: sql ruby-on-rails search