Я пытаюсь создать систему резервирования компьютеров, где пользователь выбирает компьютер и выбирает время, в течение которого он будет использовать этот компьютер. В то время другие люди не могут зарезервировать этот компьютер, мне нужно найти решение, как автоматически удалять все строки, содержащие зарезервированные ПК, по истечении их времени. Спасибо за совет.
Это непроверенный ответ, который может быть только предположением, но я только начал смотреть на них, поэтому меня тоже интересует обратная связь. я все еще работаю через возможности и недостатки, но это вполне может удовлетворить ваши потребности.
Взгляните на MySQL Events, статью о нем здесь и официальный синтаксис в Mysql Docs .
За статью:
Событие похоже на триггер. Однако, вместо того, чтобы работать в ответ на изменение данных, события могут планироваться для запуска любое количество раз в течение определенного периода времени. По сути, это работа cron для базы данных.
Подумав об этом, я предвидел процедуру, которая удалила что-нибудь> 1 ч (если это истечение). Эта процедура будет TRIGGERED в новых вставках, чтобы избавиться от чего-либо, истекшего в тот момент, но также и в случае запуска каждые 15 минут, чтобы автоматическое удаление с помощью триггера не зависело от кого-то, добавляющего резервирование для запуска этого процедура.
Общий способ справиться с этим – хранить expires_at
метку expires_at
в строке reservation
. Тогда ваш запрос на поиск каких-либо «открытых» оговорок будет иметь WHERE 'expires_at' < NOW()
или что-то подобное.
Если ваш сервер является linux, вы можете использовать задания cron для проверки один раз в день в каждой дате бронирования. Если эти даты истекли .. измененные резервы полей будут доступны.
Обычно я делал это так:
date_from
и date_to
обоих date_to
данных DATETIME
WHERE '{$my_date}' >= date_to AND '{$my_date}' <= date_from
– этим вы должны иметь возможность получить все ПК, которые не являются зарезервировано в течение определенного времени … Чтобы быть полным в решении, вам нужно запустить задание CRON, которое вызывает запрос, чтобы удалить все оговорки с резервированием_time + (15 * 60) <unix_timestamp ().
Я предполагаю, что у вас есть время, когда резервирование было размещено или начато, и используют отметки времени UNIX / Epoch.
Вместо того, чтобы делать expires_now, если вы знаете, что он всегда будет фиксированным интервалом, т.е. 15 минут, вы можете сделать:
DELETE FROM reservations WHERE reservation_time + (15 * 60) < unix_timestamp()
Что-то, что вы могли бы изучить, это управление работой cron с PHP, http://www.highonphp.com/cron-job-manager .
Вышеприведенный сценарий при создании резервирования вставляет запись в /etc/cron.d/, и вы можете настроить его для запуска в ожидаемое время резервирования. Затем внутри файла php, который будет выполнен, вы можете сделать:
DELETE FROM reservations WHERE id = :id