2013-05-31 149 views
2

我正在設置計劃的cron作業,每隔一個星期一啓動一個PHP腳本。 我的目標是運行一個SQL查詢,該查詢返回基於我公司的支付期限的工單。每個支付期限在我運行此計劃的cron作業之前的星期五結束。根據表中分配的日期範圍按日期篩選記錄

我有一個SQL表列出了我公司的所有工資期,所以這個表有兩列:payperiod_from(開始日期範圍)和payperiod_to(結束日期範圍)。我正在拉的工作單有一個分配給他們的日期。我希望能夠在日期在payperiod_frompayperiod_to之間的地方取得工單。

由於薪資期間每隔一個星期五結束,而此cron工作計劃在此後的星期一,因此我可以簡單地使用CURDATE() - 3(週一至週五前3天);獲取日期爲payperiod_to,但是如何運行查詢來篩選工作訂單的日期屬於正確的支付期限?

希望這對你們中的一些人有意義。

+0

你能展示一些樣本數據和期望的輸出嗎?另外,您應該嘗試自己解決問題,然後我們會幫助您解決問題 - 我們不在這裏爲您編寫代碼。 – Barmar

回答

0

嘗試設置「每隔一週」的cron作業可能會遇到麻煩。有關於該here的StackOverflow答案;注意答案下的評論。

對於選擇日期屬於正確支付期限的工單,如果您已經在前三天計算了付款期限結尾CURDATE()爲什麼不忘記pay_periods表(或任何名稱)並計算工資期間開始16天前CURDATE()

SELECT * FROM wkorder 
WHERE wkorder.orderdate BETWEEN CURDATE() - INTERVAL 16 DAY AND CURDATE - INTERVAL 3 DAY 

如果你不能得到cron作業每隔一週可靠地運行,並有將其設置爲每週,那麼你可以使用pay_periods表來濾除掉周。這將防止任何的結果,如果週五之前沒有付費的結束日期,因爲不會有在pay_period表匹配:

SELECT * FROM wkorder 
INNER JOIN pay_period ON 
    payperiod_to = CURDATE() - INTERVAL 3 DAY AND 
    wkorder.orderdate BETWEEN pay_period.payperiod_from AND pay_period.payperiod_to 

最後請注意,上面的查詢是語法正確的,但他們沒有完全測試。從問題中的信息到實際的表結構都是一個巨大的飛躍。