Invece di aggiornare i conteggi per giorno, settimana ecc., INSERIRE semplicemente una riga in una tabella ogni volta che si verifica un'attività come questa:
insert into activities (activity_date, activity_info)
values (CURRENT_TIMESTAMP, 'whatever');
Ora i tuoi rapporti sono molto semplici come:
select count(*) from activities
where activity_date between '2008-01-01' and '2008-01-07';
o
select YEARWEEK(`activity_date`) as theweek, count(*)
group by theweek