【问题标题】:How to auto update a record in database?如何自动更新数据库中的记录?
【发布时间】:2012-03-06 11:27:41
【问题描述】:

我有一个工作表,可以在其中插入新工作。 此表还包含职位发布日期。

默认情况下,当新插入发生时,作业状态为打开。

现在我想在作业超过 30 天时将作业的状态从打开更改为关闭。

我该怎么做?

【问题讨论】:

    标签: php mysql auto-update


    【解决方案1】:

    尝试创建一个每天运行的事件,如下所示

    CREATE EVENT myevent
      ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 DAY
      DO
        UPDATE my_table SET status ='closed'
        WHERE post_date > DATE_ADD(now(), INTERVAL -30 DAY)
        AND status='open'
    

    -- 更新改变的语法

      CREATE EVENT myevent
      ON SCHEDULE EVERY 24 HOUR
      DO
        UPDATE my_table SET status ='closed'
        WHERE post_date > DATE_ADD(now(), INTERVAL -30 DAY)
        AND status='open'
    

    【讨论】:

    • 我应该在哪里写上面的查询?在 Mysql 的 SQL 选项卡中?
    • 是的并使用SHOW events from DbName查看是否已创建事件
    • 查询成功执行,现在它显示了我创建的事件。但是如何检查最后执行的日期和时间的事件的日期和时间?
    • 试试这个查询SELECT * FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME = 'myevent' AND EVENT_SCHEMA = 'DbName'
    • 嗨,我昨天创建了一个活动,正如你在回答中描述的那样,但是当我今天查看它时,它没有将状态列更新为关闭。我使用您评论中提到的选择查询,事件的最后执行时间为NULL。
    【解决方案2】:

    使用 cron 作业来处理这个问题。 http://en.wikipedia.org/wiki/Cron

    如果你不能处理 cron,你可以做一个“穷人的 cron”。表示当有人访问您的页面时会发生更新所有作业记录的实际过程(在最后一次运行时进行额外检查)。如果您这样做是“糟糕”的方式,我建议您关闭另一个线程以保持您的网站负责。

    【讨论】:

    • 但是 crontab 文件会怎样呢?你能告诉我那个文件的内容吗?我应该用哪个扩展名保存那个文件?
    • scrounge.org/linux/cron.html。今天了解到 mysql 支持事件,所以我会坚持使用 Naveen 的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多