2014-09-02 76 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