Php MySQL-如何每24小时减少int值?
我正在用PHP开发一个系统。在my MySQL中,有一个表Php MySQL-如何每24小时减少int值?,php,mysql,Php,Mysql,我正在用PHP开发一个系统。在my MySQL中,有一个表借用。内部借用是borrow\u statusvarchar和borrow\u remain,这是一个int值。当用户单击提交按钮时。查询将运行类似于 INSERT INTO `borrow`( `borrow_status`,`borrow_remain`) VALUES ('Borrowing',3) 当达到零时,我如何减少每24小时的借用剩余值,然后更新借用状态至完成 编辑:我还有一个book表,它有一个book\u数量,我唯一
借用。内部借用是borrow\u status
varchar和borrow\u remain
,这是一个int
值。当用户单击提交按钮时。查询将运行类似于
INSERT INTO `borrow`( `borrow_status`,`borrow_remain`) VALUES ('Borrowing',3)
当达到零时,我如何减少每24小时的借用剩余值,然后更新借用状态
至完成
编辑:我还有一个book
表,它有一个book\u数量
,我唯一关心的是,如果book\u状态
更新为Finish
,那么book\u数量
必须增加,您是否查看了mySQL中的事件?您可以创建事件并将其设置为按特定计划运行。这可能就是你的问题所在 您还可以设置一个cronjob,该job执行一段代码,以减少“借用保持”并相应地更新“借用状态”。如果您的主机具有cPanel,则非常简单:您可以按照以下三个步骤实现上述场景:
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();
注意:
UBS是过程名称。[UBS=更新借用状态(仅一个
相关缩写]
活动将于明天(2015年3月4日)上午12:00开始
祝你今天愉快
编辑:要在借阅表中的借阅状态更新为“已完成”时增加借阅表中的借阅计数,您需要一个触发器
假设您有一个book表,其中book的计数由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 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
我在哪里可以找到这些事件?好吧,假设我已经解决了这个问题,但是当它达到零时我如何更新?为什么不让借用到期日
而不是借用剩余日
?哦,我明白了,谢谢你的关心。这是借用剩余天数。:)我认为这与借出到期日
相同。区别在于,如果存储“到期日”而不是“剩余天数”,则无需增加/减少任何内容:只需测试当前日期是否大于或小于到期日。我也想到了这一点,下面是我的想法。在提交表单3天后用PHP设置值是否困难?求你了,我想听听你的意见。给我一个逻辑解释。是的,borrow\u expiration\u date
将是一个date
数据类型。您可以使用查询借阅过期日期=当前日期+间隔3天的位置。该事件是否仍可用于将来的输入?它给了我创建过程的错误<代码>第4行的“”附近
表示该语法不正确。我的MySQL版本是5.5.36,如果上述场景保持不变,那么它肯定会工作。顺便说一句,我已经在自己测试后发布了我的答案。因此,您的分隔符可能有问题。请你拍下这个错误的快照并在这里发表评论好吗?您可以查看与在MySQL中定义存储过程相关的链接。你好我刚刚知道你为什么会出错。这正是我先前所评论的。我编辑了我的文章。请立即尝试。希望这次您不会出现错误。嘿,是的,存储过程正在运行!这是delimeter什么的。我以后会读到的。我忘了问我的问题。5分钟后请看我的问题。现在我尊敬你。谢谢你的回答和建议。我会记住这一点。保持健康。:)