【问题标题】:cronjob/trigger which can update the database everyday可以每天更新数据库的 cronjob/trigger
【发布时间】:2010-11-18 19:01:57
【问题描述】:

我使用 MYSQL 作为我的数据库,使用 PHP 作为我的编程语言。我想运行一个 cron 作业,该作业将一直运行到当前系统日期与名为“PROJECT”的数据库表中的“deadline(date)”列匹配。一旦日期相同,则必须运行更新查询,这会将状态(项目表的字段)从“打开”更改为“关闭”。

我不确定 cron 作业是否是最好的方法,或者我可以使用触发器或其他方式。另外,我使用 Apache 作为我的网络服务器,我的操作系统是 windows vista。

【问题讨论】:

  • 在这个问题中对 cron 的引用应该改为 windows 等效项。

标签: php mysql windows windows-vista


【解决方案1】:

如果您的操作系统是 Vista,则相当于 cronjob 的是计划任务。 MySQL 没有在日期更改时运行触发器的功能,因此执行相同操作的 PHP 脚本是一个不错的选择。

您所要做的就是打开计划程序(控制面板 > 系统和维护 > 管理工具 > 计划任务)并创建一个新任务。

例如,如果 PHP 安装在 C:\PHP\ 并且您的脚本在 C:\htdocs\tasks\close_projects.php,您需要创建一个具有以下操作的任务:

操作: 启动程序
程序/脚本: C:\PHP\php.exe
添加参数: close_projects.php
开始于: C:\htdocs\tasks\

根据您的需要调整其余设置。 (例如,您想使用日常任务)。


另一种选择是在当天的第一个请求时完成您的任务。在这种情况下,您需要添加一些在每次页面加载时运行的 PHP 代码。只需存储最后一次请求的日期,如果当前请求是昨天发出的,则运行您的 SQL 语句。

【讨论】:

    【解决方案2】:

    由于某些主机缺少 cron,我曾经为“延迟任务”编写了一组类。我意识到有些任务不必在您指定的时间准确运行,但它们可以推迟到某些客户端第一次请求服务器时。

    希望它可能会有所帮助 - ZIP

    【讨论】:

    • 在他的情况下,他可以访问服务器,在这种情况下,最好使用计划任务或 cronjob,因为对于长时间的工作,它不会在任务运行时延迟请求。
    【解决方案3】:
    UPDATE project SET status='closed' WHERE deadline<=CURDATE();
    

    设置一个计划任务来运行这个查询应该很简单。

    【讨论】:

    • 我会使用&lt;= CURDATE(),以防调度任务错过运行。
    • 感谢您指出监督 Andrew Moore - 答案已更新
    【解决方案4】:

    你运行的是什么版本的mySql?

    mySql 从 5.1.6 开始支持时间触发器

    http://dev.mysql.com/tech-resources/articles/event-feature.html

    .k

    【讨论】:

      猜你喜欢
      • 2013-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      • 2018-07-03
      • 2016-11-14
      • 1970-01-01
      相关资源
      最近更新 更多