В настоящее время я создаю небольшой инструмент для журналов, и мне трудно работать с таблицами mysql.
Вот мои две таблицы:
CREATE TABLE site_logs
(
id int auto_increment,
level VARCHAR(45),
severity varchar(45),
uri varchar(255),
message VARCHAR(255),
trace varchar(255),
device varchar(45),
os varchar(45),
browser varchar(45),
ip varchar(45),
created_ at datetime
);
CREATE TABLE site_logs_stats
(
id int auto_increment,
log_id int,
date datetime,
count int,
);
Вот ситуация:Каждый час я анализирую свой файл журналов и получаю массив $ result, в котором я получаю каждую ошибку и количество событий в течение часа.
Далее я вставляю значения в таблицу следующим образом:
$result = array_values($result);
foreach ($result as $res) {
$this->db->insert('site_logs',array(
'level' => $res['level'],
'severity' => $res['severity'],
'uri' => $res['uri'],
'message' => $res['short_message'],
'trace' => $res['short_trace'],
'device' => $res['device'],
'os' => $res['os'],
'browser' => $res['browser'],
'ip' => $res['ip']
));
Что я хочу сделать:
В таблице site_logs я хочу только уникальные ошибки (если есть одна и та же ошибка 14:00 и 16:00, я хочу, чтобы она была записана один раз в этой таблице). Если ошибка получила тот же уровень, серьезность, URI и трассировку, то я считаю, что это та же самая ошибка.
Во второй таблице i история каждой уникальной ошибки ex: если такая же ошибка появляется в 14:00и в 16:00 я хочу иметь site_logs.log_id 2 раза, часы, в которые они записаны, и количество событий во время слота (например, 14:00 -> 15:00 и 15: 00-> 16:00).
Я пробовал много разных запросов, но не смог.
РЕДАКТИРОВАТЬ:
Теперь я вставляю данные в таблицу site_logs:
$result = array_values($result);
foreach ($result as $res) {
$this->db->replace('site_logs',array(
'level' => $res['level'],
'severity' => $res['severity'],
'uri' => $res['uri'],
'message' => $res['short_message'],
'trace' => $res['short_trace'],
));
с уникальным ключом для идентификатора, он, кажется, работает довольно хорошо, я удалил другие поля для более легкой сортировки и избегаю дублирования, кроме как через ip / browser и т. д. Так что теперь я работаю над второй частью, где я должен вставить site_logs. id в site_log_stats и подсчитывать количество событий каждый час. (Я думаю о 'last_insert' или о чем-то вроде этого.