MySQL – Как уменьшить значение int каждые 24 часа?

Я работаю над системой на 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 .

Solutions Collecting From Web of "MySQL – Как уменьшить значение int каждые 24 часа?"

Вы можете реализовать описанный выше сценарий в соответствии с тремя шагами, приведенными ниже:

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(); 

Заметка :

  1. UBS – это имя процедуры. [UBS = Обновить статус заимствования (только соответствующая аббревиатура)
  2. Мероприятие начнется с завтрашнего дня (4 марта 2015 года) в 12:00

Хорошего дня!

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