Zamiast aktualizować liczniki na dzień, tydzień itp., po prostu WSTAW wiersz do tabeli za każdym razem, gdy czynność ma miejsce w ten sposób:
insert into activities (activity_date, activity_info)
values (CURRENT_TIMESTAMP, 'whatever');
Teraz Twoje raporty są bardzo proste, takie jak:
select count(*) from activities
where activity_date between '2008-01-01' and '2008-01-07';
lub
select YEARWEEK(`activity_date`) as theweek, count(*)
group by theweek