Как в sql удалять запись по времени заданным юзером?
У меня в phpMyAdmin есть бд с таблицей вывода записей (заказов юзеров), которая имеет свою форму заполнения для юзера, чтобы устаревшие записи не "валялись" хочу добавить новое поле в форме заполнения date_discharge типа timestamp, где пользователь может задать время, допустим когда ему уже это не нужно будет (к примеру через неделю 07.01.2019), вот хочу сделать, чтобы в бд по наступлению значения даты определенной записи она автоматом удалялась, как можно это реализовать?
Нужно написать скрипт, который удалит записи старше недели, и запускать его по крону раз в день(или чаще, чтобы удалять частями). Язык не важен. Скрипт будет очень простым, буквально подключение к базе и один запрос.
Хмм, а чем вам события sql не нравятся? С кроном никогда не работал, слышал, что он платный или может не быть у хостинга. + требуется не удалять записи старше недели, а удалять записи, где значение в date-remove = now() текущему
Viplayer, Тем, что это не будет работать на произвольном хостинге. Если даже у вас будут права на SET GLOBAL, при перезагрузке mysql эти изменения не сохранятся. У себя на виртуалке, это можно настроить и использовать, но зачем? =)
Где он вдруг платный? Не, может есть такие хостеры, но это жлобство уж совсем. date-remove = now() Ну так ещё проще скрипт будет.
Я бы еще добавил + INTERVAL 1 DAY после NOW(), чтобы если юзер ставил число по этот день, то она удалял на след день, "мало ли" она ему в Тот день еще нужна
Viplayer, Если записей много, а посещения не частые, лучше уж крон. Иначе на каждую загрузку страницы лишние тормоза, возможно довольно заметные. Да и просто делать лишний запрос на каждую страницу как-то не очень правильно.
Такие задачи кроном разумнее решать практически всегда.
Я слышал что в mysql можно события создавать
Сначала включить SET GLOBAL event_scheduler=ON;
Потом введенное время используется в запросе создания события и соответственно команда DELETE FROM...
CREATE EVENT event_name ON SCHEDULE AT {DATE AND TIME} DO {SQL COMMAND};
CREATE EVENT mydel
ON SCHEDULE EVERY 60 MINUTE
DO
DELETE FROM my_table_database SET date_remove = now() WHERE startDate = DATE_SUB(CURDATE(), INTERVAL 1 DAY);
думаю, такой запрос сойдет, но я не совсем понимаю sql, если знаете, то посмотрите условие, где "!", нужно, чтобы Если значение в date_remove = текущему NOW(), то удалить
(значение, как правило, всегда будет больше(потому что юзер задает когда ему не надо будет (б.в)) и вот когда оно стало таким, так текущая дата, то удалить... Сорри за запутанность
Viplayer, ну она удалиться при запросе у сервера страницы с этим скриптом и соответственно позже. И он так и будет в базе пока допустим пользователь не залогинется чтобы было WHRE=$this_id