2010-08-23 6 views
0

Comment puis-je compter le nombre de résultats renvoyés par une requête "group" sans obtenir les données? Jusqu'à présent, je reçois juste une table de résultats. Est-il possible dans rails3 d'optimiser cette requête?Ruby: grouper et compter le nombre de résultats

Vote.group("question_id, user_id").where("question_id = 3").count.count 
=> 2 

Dans ce cas, nous faisons un compte de ce Hashtable =>{1=>10, 15=>1}

Query est:

SELECT COUNT(*) AS count_all, question_id, user_id AS question_id_user_id 
FROM `votes` 
WHERE (question_id = 3) 
GROUP BY question_id, user_id 
+0

Qu'essayez-vous exactement de trouver? Le total des votes ayant les deux attributs, question_id et user_id, où question_id = 3? Je ne suis pas sûr de comprendre votre requête. – Trip

+0

Je veux faire un compte simple sur un groupe, mais actuellement je commence à être plus rapide avec les données et je dois refaire le compte pour obtenir le nombre d'utilisateurs qui ont voté sur une question spécifique. Je fais un groupe parce que je peux avoir plusieurs réponses possibles par utilisateur pour une question. – Gros

Répondre

1

Vous pouvez utiliser count_by_sql:

Vote.count_by_sql("select count(*) from (select 1 from Votes group by question_id, user_id)") 

Ou, vous pouvez construire la requête en utilisant Rails, puis exécutez-le:

query = Vote.group(:question_id, :user_id).to_sql 
count = Vote.count_by_sql("select count(*) from (#{query})") 
+0

La solution de contournement fonctionne correctement. Lors de mon test sur la version mysql, j'ai aussi dû nommer la table: 'select count (*) from (# {query}) mycount' – Gros

Questions connexes