2009-12-09 7 views
1

Voici mon modèle de données de mon application:Générer un rapport avec MySQL et Rails - comment?

id: entier (4) non nul, clé primaire spam: Boolean (1) non nul double: Boolean (1) non nul Ignore: Boolean (1) non nulle brand_id: nombre entier (4) non nulle l'attitude : string not posted_at: datetime not

Attitude pourrait avoir 3 états: négatif, positif, neutre.

Je veux générer ResultSet dans le tableau, de cette façon, pour chaque jour entre le début et la date de fin:

 
date  | total | positive | neutral | negative 
2009-10-10 | 12 |  4 | 7 |  1 
(...) 
2009-10-30 | 5 |  2 | 1 |  1 

et ignorer tous les dossiers qui ont:

double = true ignorer = true spam = true

Comment cela peut-il être fait?

Répondre

0
Data.all :select  => "DATE(posted_at) AS date, 
          COUNT(*) AS total, 
          SUM(attitude = 'positive') AS positive, 
          SUM(attitude = 'neutral') AS neutral, 
          SUM(attitude = 'negative') AS negative", 
      :conditions => [ "duplicate <> ? AND ignore <> ? AND spam <> ?", 
          true, true, true ], 
      :group  => :date, 
      :order  => :date 

Cela devrait vous donner les données que vous voulez; Je le laisse comme un exercice pour le lecteur de le faire dans une table. (Les gourous de SQL: s'il vous plaît n'hésitez pas à vérifier mon travail.)

+0

Ce code ne fonctionnera pas:

 class Brand < ActiveRecord::Base has_many :messages, :dependent => :destroy def report() self.messages.find(:all, :select => "DATE(posted_at) AS date, COUNT(*) AS total, SUM(attitude = 'positive') AS positive, SUM(attitude = 'neutral') AS neutral, SUM(attitude = 'negative') AS negative", :group => :date, :order => :date) end end >> Brand.find(1).report => [#] >> 
Arywista

+0

https://gist.github.com/77695da9dc3e2ecef1ff – Arywista

+0

On dirait qu'il est de retour d'une ligne. Avez-vous plus d'une journée de données? Quelles sont les valeurs du message # total, du message # positif, etc.? –

0

Jetez un oeil à Rapports Jasper. Je l'utilise pour toutes mes applications. C'est facile à utiliser et à configurer. Il est également plus facile de gérer les sous-rapports, etc. sans polluer votre base de code d'application.

Questions connexes