Я хотел бы создать поисковый запрос, который группирует записи по их атрибуту '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
Любая помощь очень ценится, спасибо!