Я бы суммировал количество обращений по SQL-заданию и поместил бы ежедневный результат в таблицу, например [logsum]:
Table [logsum]:
sum_id (int / auto_increment)
sum_day (date)
sum_name (string)
sum_count (number)
и денормализованные данные журнала в [logaccess]:
Table [logaccess]:
access_id (int / auto_increment)
access_day (date)
access_ip (string)
access_browser (string)
access_os (string)
access_click_count (int)
SQL-работы:
1) Добавить все записи журнала в [Loginfo] и суммировать клики по IP и дням
for each line in log
{
info = parse(line)
execute_sql('REPLACE logaccess
SET
access_day=date(),
access_ip='& info[IP] &',
access_browser'& info[browser] &',
access_os='& info[OS] &',
access_click_count=IF(ISNULL(access_click_count),0,access_click_count) + 1)
WHERE access_day=date() AND access_ip='& info[IP] &';')
}
2) Подведите итоги и сохраните в [logsum]:
//- get OS count per day
res = execute_sql('SELECT access_day, access_os, count(access_id) AS C FROM logaccess GROUP BY access_day, access_os;');
//- write to [logsum]
for each record in res
{
REPLACE logsum SET
sum_day=record['access_day'],
sum_name=record['access_os'],
sum_count=record['c']
WHERE sum_day=record['access_day'] AND sum_name=record['access_os'];
}
//- get browser count per Day
res = execute_sql('SELECT access_day, access_browser, count(access_id) AS C FROM logaccess GROUP BY access_day, access_browser;');
//- write to [logsum]
for each record in res
{
REPLACE logsum SET
sum_day=record['access_day'],
sum_name=record['access_browser'],
sum_count=record['c']
WHERE sum_day=record['access_day'] AND sum_name=record['access_browser'];
}
//- get IP count per Day
res = execute_sql('SELECT access_day, count(access_id) AS C FROM logaccess GROUP BY access_day;')
//- write to [logsum]
for each record in res
{
REPLACE logsum SET
sum_day=record['access_day'],
sum_name='ip',
sum_count=record['c']
WHERE sum_day=record['access_day'] AND sum_name='ip';
}
//- get click count per Day
res = execute_sql('SELECT access_day, sum(access_click_count) AS C FROM logaccess GROUP BY access_day;')
//- write to [logsum]
for each record in res
{
REPLACE logsum SET
sum_day=record['access_day'],
sum_name='clicks',
sum_count=record['c']
WHERE sum_day=record['access_day'] AND sum_name='clicks';
}
3) очистить / удалить записи старше 1 года:
DELETE FROM logaccess WHERE access_day<DATE_ADD(date(),INTERVAL 1 year)
Может быть, это поможет вам
С уважением Томас