我正在使用PHP系统。在我的MySQL中有一个表borrow
。内部借用borrow_status
是varchar,borrow_remain
是int
值。当用户单击“提交”按钮时。查询将运行类似
INSERT INTO `borrow`( `borrow_status`,`borrow_remain`) VALUES ('Borrowing',3)
如何在每24小时递减borrow_remain值,然后UPDATE
将borrow_status
递减到Finish
,当它达到零时?
编辑:我还有一个book
表,其中包含book_quantity
,我唯一担心的是book_quantity
必须在borrow_status
更新为{{}时增加1}}。
答案 0 :(得分:3)
您可以按照以下三个步骤实施上述方案:
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();
注意:
祝你有愉快的一天!
编辑:每当借阅表中的borrow_status更新为“已完成”时,都会在book表中增加book_count。你需要一个触发器。
假设您有一个书籍表,其中书籍的数量由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;
建议: 您需要改进数据库设计。否则,您将来可能会遇到更多设计复杂架构的麻烦。保持健康!
答案 1 :(得分:1)
你看看mySQL中的事件吗?您可以创建一个事件并将其设置为按特定计划运行。这可能是你问题的门票!
答案 2 :(得分:0)
您还可以设置一个执行一段代码的cronjob来减少“borrow_remain”并相应地更新“borrow_status”。如果你的托管有cPanel,那很容易:https://documentation.cpanel.net/display/ALD/Cron+Jobs
答案 3 :(得分:0)
您需要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