2010-02-17 8 views
0

J'ai actuellement la requête suivanteRuby on Rails de requête Aide

User.sum(:experience, :group => "clan", :conditions => ["created_at >= ? and created_at <= ?", "2010-02-15", "2010-02-16"]) 

Je veux retourner les 50 premiers clans en termes d'expérience énumérés plus de l'expérience au moins une expérience avec seulement le top 50 dans l'expérience de retour. Comment est-ce que je modifierais la requête pour atteindre ce résultat. Je sais que j'ai besoin de: limite => 50 pour limiter la requête mais si j'ajoute: order => "clan DESC" je reçois la colonne error "users.experience" qui doit apparaître dans la clause GROUP BY ou être utilisée dans un agrégat fonction

+1

sur la base de cette requête ActiveRecord, il semble que vous l'agrégation aux utilisateurs de trouver l'expérience totale de chaque clan commandé par le plus expérimenté au moins. Est-ce exact? Il peut être utile d'indiquer exactement ce que vous entendez par "résultats" - si vous voulez des utilisateurs, la méthode de somme n'est pas ce que vous voulez. –

+0

tomtoday - c'est correct et j'ai mis à jour la question originale pour refléter cela. Que dois-je utiliser pour remplacer .sum? – Splashlin

Répondre

0

vous devez répéter le calcul dans l'ordre clause

User.sum(:experience, :group => "clan", :order=> "sum(experience) DESC", :limit => 50, :conditions => ["created_at >= ? and created_at <= ?", "2010-02-15", "2010-02-16"]) 
+0

Est-ce que cela ne fonctionne pas? J'essaie de m'assurer que je n'ai pas d'erreur dans ma logique ... – naven87