2014-09-02 37 views
0

感谢您提前提供的所有帮助!来自MySQL查询的PHP cron作业

我刚刚开始使用PHP,目前必须使用现有的代码;这是我的头。

我有充满功能的文件,其中包括这MySQL查询:

function search_late_orders(){ 
     $this->assert_connected(); 
     $this->assert_table_exists(REGION_PREFIX."Order"); 

     $date = date('Y-m-d H:i:s'); 
     $sql = "UPDATE `".REGION_PREFIX."Order` 
      SET `".REGION_PREFIX."Order`.`orderfulfilled_ts` = `".REGION_PREFIX."Order`.`orderread_ts` 
      WHERE `".REGION_PREFIX."Order`.`orderfulfilled_ts` = '0000-00-00 00:00:00'"; 
    } 

什么,我试图完成的是从不同的文件重申此功能每90分钟。唯一需要注意的是我的数据库大概有60K行,而且增长迅速。以性能为目标来完成类似事情的最佳方式是什么?

+0

那岂不是更容易设定像刚刚在数据库表'DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP''oderfulfilled_ts'的默认值?这将使这个功能superflouus – 2014-09-02 04:59:59

+0

我实际上需要看到orderfulfilled_ts在时间上的差异。如果我将它设置为默认值,那么时间将显示90分钟,但我宁愿它显示0.不幸的是,这种疯狂有一种方法。 – Bard 2014-09-02 10:13:41

+0

另一种方法是使用mysql [events](http://dev.mysql.com/doc/refman/5.1/en/events-overview.html),但由于表名在您的程序中是可变的,您需要为每个表定时器或定时器中的一种表格列表。 – 2014-09-02 12:30:19

回答

0
0  0,3,6,9,12,15,18,21  *  *  *  /usr/bin/php -q /yourpath/search_late_orders.php 

你可以使用crontab来运行这个任务每90分钟

+0

本网站托管在Heroku,所以我相信我将不得不从另一个php文件调用该函数,因为我没有该文件的路径。或者我错了那个假设? – Bard 2014-09-02 10:15:10

0

先安装cronie.i不KNW版本Linux妳using.i正在使用centos

yum install cronie 

为根。如果你知道作为root的风险。如果不是sudo用户 第一加apache用户

useradd apache-Apache 

which php看到路径 在/ usr/bin中/ PHP

给予必要的权限和所有权

chown apache /path/to/file 
chmod 755 /path/to/file 

crontab -l列出该用户cronjobs。

现在crontab -e编辑或创建新作业,因为它会打开vi编辑器。

* * * * * php /location/of/yourfile/scriptto call 

添加您的及时到位的明星,以符合您的要求

+0

谢谢您的建议,但是,不幸的是,这个程序在Heroku上运行。 – Bard 2014-09-03 12:48:29