Всем привет! Записываю статистику входа в БД. Показываю только 5 последних. Как удалить уже устарелые записи, т.е. с каждым разом 5-ая запись становится 6-ым и уже не выводится, как удалить эту 6 или более записей?
Как вариант можно маркировать как удаленные. В стиле:
INSERT INTO `loginHistory`(`userId`, `createdAt`)
VALUES (:userId, CURRENT_TIMESTAMP());
UPDATE `loginHistory`
SET `isDeleted` = 1
WHERE `userId` = :userId
ORDER BY `id` ASC
OFFSET 5;
SELECT
`id`,
`userId`,
`createdAt`
FROM `loginHistory`
WHERE `userId` = :userId
AND `isDeleted` = 0
ORDER BY `id` ASC;
В этом случае можно вытягивать статистику по последним входам для всех пользователей
index0h, да хоть 1к, отработает и не поперхнется. Но здравый смысл подсказывает, что раз автору нужны последние 5 входов, то речь идёт условно о паре-тройке человек. Иначе вообще никакого в смысла в таком "логе" нет.
очень проста каждый раз перед insert into вам надо проверят сколько записи есть в таблице...
примеру таким методам:
$count = $db->query('SELECT COUNT(id) as `all` FROM `table`')->fetch_object();
if($count->all == 5){
$db->query('DELETE FROM `table` WHERE id > 0 ORDER BY `id` ASC LIMIT 1');
}
потом после if оператора тут проста insert into $db->query("INSERT INTO");
Это не статистика. Не уверен что стоит записывать в БД Ваш случай,может проще в лог выводить информацию, и тем же модулем отправлять например в файл на дозапись, с счётчиком до 5 на перезапись.
Правда такой подход тоже соснителен, так как подразумевает частый мониторинг лога.