Как сделать так, чтобы значение в БД изменилось через определенное время?

Задача заключается в том, что необходимо изменить данные таблицы (id_status ) MySQL через определенное время. Например, клиент бронирует место допустим в 14.00. У места выставляется статус "Забронировано" (id_status = 1). Если в течение суток он не оплатил заказ то изменить значение id_status = 0. Как с помощью (PHP, MYSQL), реализовать это ?
  • Вопрос задан
  • 1126 просмотров
Решения вопроса 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Если в течение суток он не оплатил заказ то изменить значение id_status = 0.

Это неверный подход в архитектуре, отсюда и проблемы с неверной постановкой задачи. У вас должен быть отдельный объект брони, и на него отдельная таблица, в которой легко проверить насколько давно была сделана бронь, если больше какого-то времени и не оплачена - в выборке занятых объектов не учитывается. Ничего апдейтить не нужно, и если завтра поменяется логика бронирования основные свойства объекта не будут затронуты. Плюс будет статистика кто когда и как бронировал, с историей броней и оплат.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@mistergonza
PHP6 evangelist
Либо cron и команда которая проверяет прошли ли сутки с момента бронирования и меняет статус.

Либо где-то в модели сделать метод isBooked который будет возвращать true, в случае если стоит статус 'забронирован' и сутки еще не прошли, и false в противном случае. Но скорей всего надо будет добавить где-то логику которая будет изменять в базе статус если этот метод вернул false (как в указано ответе выше, можно эту логику записать в триггер, в mysql они есть).

Без примеров что-то более подробное сложно посоветовать.
Ответ написан
Комментировать
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
Ответ написан
Комментировать
mxms
@mxms
IT voodoo
В MySQL есть встроенный шедуллер или events. Можете для каждого такого события создавать разовый event с удалением нужного, либо сделать единый который будет проделывать то же для всей базы с определёнными интервалами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы