Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL-如何每24小时减少int值?_Php_Mysql - Fatal编程技术网

Php MySQL-如何每24小时减少int值?

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数量,我唯一

我正在用PHP开发一个系统。在my MySQL中,有一个表
借用
。内部借用是
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分钟后请看我的问题。现在我尊敬你。谢谢你的回答和建议。我会记住这一点。保持健康。:)