Je voudrais construire une requête de recherche qui regroupe les enregistrements par leur attribut 'tag', et trouve un certain nombre d'enregistrements pour chaque groupe de variables. Ma table « place » est la suivante:Rails - rechercher des enregistrements par groupe
| ID | name | geom | rating_av | tag |
Il y a quatre différentes balises qu'un lieu peut être attribuée - « ville », « nourriture », « hôtel » et « attraction ». Je souhaite que ma recherche puisse renvoyer les cinq premiers enregistrements de chaque groupe de balises, classés par rating_av
, avec une contrainte géométrique supplémentaire. Je peux interroger chaque étiquette à la fois avec les éléments suivants (qui semble fonctionner très bien):
Place.find(:all, :limit => 5, :conditions => ["geom && ? and tag = ?", Polygon.from_coordinates([[[xMinLng, yMinLat], [xMinLng, yMaxLat], [xMaxLng, yMaxLat], [xMaxLng, yMinLat], [xMinLng, yMinLat]]], 4326), "food"])
Cependant, je voudrais être en mesure de récupérer les cinq premiers enregistrements pour chaque balise dans une seule requête. Quelle est la meilleure façon de construire une telle requête? Dois-je penser à ajouter la colonne 'tag' en tant qu'index pour faciliter la recherche? Je l'ai essayé d'ajouter :group => 'tag'
à la requête, mais je ne suis pas trop sûr comment l'utiliser correctement, comme je l'ai l'arrière erreur suivant:
ActiveRecord::StatementInvalid (PGError: ERROR: column "places.id" must appear in the GROUP BY clause or be used in an aggregate function
Toute aide est grandement appréciée, merci!
Merci pour l'aide, existe-t-il une méthode basée sur Ruby pour réaliser la même requête? – Budgie
Mis à jour ma réponse, jetez un oeil. –
Génial, bravo! – Budgie