Я работаю над системой на PHP. В моем MySQL есть таблица borrow
. Внутренний заимствование – borrow_status
varchar и borrow_remain
который является значением int
. Когда пользователь нажмет кнопку «Отправить». Запрос будет запускать что-то вроде
INSERT INTO `borrow`( `borrow_status`,`borrow_remain`) VALUES ('Borrowing',3)
Как я могу уменьшить значение loan_remain за 24 часа, а затем borrow_status
the borrow_status
для borrow_status
когда он достигнет нуля?
EDIT: У меня также есть таблица book
, в которой есть book_quantity
, моя единственная забота заключается в том, что book_quantity
должен увеличиваться, если borrow_status
обновляется до Finish
.
Вы можете реализовать описанный выше сценарий в соответствии с тремя шагами, приведенными ниже:
1) Сначала вам нужно включить планировщик событий Mysql.
SET GLOBAL event_scheduler = 1;
2) Создайте процедуру в mysql, которая будет выполнять связанные с статусом обновления функции.
delimiter // CREATE PROCEDURE UBS() BEGIN UPDATE borrow set borrow_remain = borrow_remain - 1 WHERE borrow_status='borrowing'; UPDATE borrow SET borrow_status = 'finished' WHERE borrow_remain=0; END // delimiter ;
3) Создайте событие, которое будет запланировано через 24 часа.
CREATE EVENT UBSEvent ON SCHEDULE EVERY 24 HOUR STARTS '2015-03-04 00:00:00' ON COMPLETION PRESERVE ENABLE DO CALL UBS();
Заметка :
Хорошего дня!
EDIT: Чтобы увеличить значение book_count в таблице книг, когда значение заимствования в таблице заимствования обновляется до «завершено», вам нужен триггер.
Предположим, у вас есть книжная таблица, где счет книги обозначен буквой; Тогда следующий триггер будет делать то, что вы хотите.
DELIMITER $$ CREATE TRIGGER IncBookCount AFTER UPDATE ON borrow FOR EACH ROW BEGIN IF NEW.borrow_status = 'finished' THEN UPDATE book SET book_count = book_count+1; END IF; END $$ DELIMITER;
ПРЕДЛОЖЕНИЕ: вам необходимо улучшить дизайн базы данных. В противном случае вы можете столкнуться с большими проблемами при проектировании сложной архитектуры в будущем. Будь здоров!
Вы просматриваете события в mySQL? Вы можете создать событие и настроить его для запуска по определенному графику. Это может быть билетом для вашей проблемы!
Для использования события необходимо иметь mysql version 5.5
. Возможно, ваше желаемое событие выглядит так:
CREATE EVENT update_borrow ON SCHEDULE EVERY 24 HOUR STARTS CURRENT_TIMESTAMP DO BEGIN UPDATE borrow SET borrow_remain = borrow_remain - 1 WHERE borrow_remain > 0; UPDATE borrow SET borrow_status = 'FINISH' WHERE borrow_remain = 0; END
Вы также можете установить cronjob, который выполняет кусок кода, чтобы уменьшить «loan_remain» и соответственно обновить «loan_status». Если ваш хостинг имеет cPanel, это довольно просто: https://documentation.cpanel.net/display/ALD/Cron+Jobs