我想构造一个搜索查询,该查询按记录的“tag”属性对记录进行分组,并为每个标记组查找一定数量的记录。我的“位置”表如下:
| 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
非常感谢您的帮助,谢谢!