2011-10-03 10 views
6
class Visitor 
    has_many :sessions 
end 

class Session 
    belongs_to :visitor 
    belongs_to :site 
end 

class Site 
    has_many :sessions 
end 

Mi piacerebbe essere in grado di ottenere il numero di visitatori di un sito per ogni giorno. Dal momento che un visitatore non è direttamente associato a un sito, ma una sessione è, ho bisogno di ottenere tutte le sessioni per un determinato sito, gruppo per giorno, quindi raggruppare per visitor_id. Ecco alcuni dati di esempio (in ordine di created_at ASC):: gruppo di giorno e un'altra colonna

visitor_id site_id created_at 
6   3   2011-09-27 
6   3   2011-09-27 
7   3   2011-09-27 
2   3   2011-09-29 
7   3   2011-09-29 

Idealmente, vorrei vedere che il 09/27 ci sono stati 2 visitatore unico, e il 29/9 c'erano anche 2 visitatori unici. Ho provato questo:

Session.group('date(created_at)').group('visitor_id').size 

Ma ho questa in cambio (che non è corretto):

# => {Tue, 27 Sep 2011=>3, Thu, 29 Sep 2011=>2} 

Grazie ragazzi!

+0

Eventuali duplicati di http://stackoverflow.com/questions/1241352/rails-group-by-multiple-columns – Kelly

risposta

8
@counts = Session.group('date(created_at), visitor_id').count 

@counts.each do |(date, visitor), count| 
    puts "#{visitor.name} visted the site #{count} times on #{date}" 
end 
0
Session.where(:created_at => desired_date).group('visitor_id').count 

Nessuna console per testare qui, mi dispiace.

+0

Se si vuole cominciare ad andare da ogni singolo sito, quindi iniziare a utilizzare has_many: tramite –

+0

Grazie, Kyle. Sfortunatamente, questo non li raggruppa di giorno. Potrei scorrere i risultati e inserirli nei rispettivi giorni, ma sembra un lavoro inutile. – imderek

0

@counts = Session.group('date(created_at)'). 
        select("count(distinct sessions.visitor_id) as total, sessions.created_at"). 
        all 

@counts.each do |count| 
    puts "#{count.total} on #{count.created_at.strftime('%m/%d/%y')}" 
end 

Problemi correlati