Задать вопрос
@del993788

Как автоматически удалять запись из бд через 10 минут?

Здравствуйте. Столкнулся с проблемой. Я сейчас делаю себе сайт для бронирования номеров в отеле. Теоретически скрипт должен работать так:
  1. Человек заходит на сайт
  2. Скрипт проверяет свободные номера и даты, и показывает их человеку
  3. Человек выбирает даты бронирования и номер и жмёт оплатить
  4. Скрипт проверяет свободность этих номеров
  5. Если номера еще свободны, скрипт записывает в бд запись с датами бронирования, номером, данными клиента и т.д.
  6. Человек переходит на страницу оплаты бронирования (на яндекс кассу, допустим)

Теперь 3 варианта развития событий
  1. Человек оплатил номер и его перекинуло обратно на сайт с поздравлением о бронировании
  2. Человек закрыл страницу оплаты (не оплатил)
  3. Человек бездействовал 10 минут (не оплатил)


Мне, наверно, нужно пояснить 5ый пункт. Это сделано для того, чтобы никто другой не мог забронировать на эти даты номер, пока наш человек его оплачивает.

Ну вот проблема заключается в том, как удалить запись из бд, если человек не оплатил бронь?
cron - не вариант. Если задать исполнение скрипта на каждые 10 минут, то есть вероятность, что человек зарезервирует номера на 8 или 9 минуте. То есть, пока человек их оплачивал, записи из бд удалились, что не есть хорошо.

Я вообще представляю себе это так: на 5ом пункте в бд записывается еще строка, типа: оплачено? да/нет. И после того, как прошел 5ый пункт, через 10 минут должен сработать скрипт, который проверит записи в бд на наличие в колонке "оплачено" "нет", и удалит всю строчку, если они есть.

Как такое реализовать? Подскажите, куда копать?
  • Вопрос задан
  • 1074 просмотра
Подписаться 2 Оценить 1 комментарий
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Вариант 1 - ставить время бронирования, запускать крон раз в минуту, удалять все неподтверждённые бронирования старше 10 минут.
Вариант 2 - запустить шедулер MySQL и вместе с бронированием создавать событие на его удаление при отсутствии подтверждения.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vjjvr
Отмечать при записи в БД время окончания бронирования.
В вашей бизнес-логике считать все просроченные записи - недействительными.

Очищать просроченные можно хоть раз в час, хоть раз в сутки, хоть раз в месяц - это будет уже не важно.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы