从cron作业调用时,MySQL查询不返回日期范围内的所有记录

时间:2014-10-27 05:55:15

标签: php mysql date cron

这是我的问题。

我有一个MySQL表,其中包含来自订单表单的详细信息,该表格是从php脚本处理的。捕获的详细信息包括订购的产品,商店位置等...我可以看到所有必需的详细信息都保存到数据库中没有任何问题。

现在我有一个脚本,每天两次从cron作业调用。此脚本在数据库中查询特定日期范围内的订单,然后将输出保存到文本文件中,然后用户下载并使用其第三方软件进行处理。

我的问题是cron作业调用的这个脚本缺少一些订单,但这并不是一直发生的。

如果我在phpmyadmin中手动执行cron作业调用的完全相同的查询,则命令会出现在输出中。

我应该注意什么,以确保捕获所有订单。

提前感谢您的帮助。


查询1 - 此cron每天下午12:05运行

SELECT o.orderID, o.orderTotal, oi.code, oi.orderQty, p.prodName, p.prodCode, s.store_name, s.store_address
FROM orders o
INNER JOIN items oi ON o.orderID = oi.orderID
INNER JOIN products p ON oi.productID = p.prod_id
INNER JOIN store s ON o.orderStoreID = s.store_id 
WHERE o.orderDateTime BETWEEN CAST('$overnightStart' AS DATETIME) AND CAST('$overnightEnd' AS DATETIME)

查询2:cron每天晚上9:05运行

SELECT o.orderID, o.orderTotal, oi.code, oi.orderQty, p.prodName, p.prodCode, s.store_name, s.store_address
FROM orders o
INNER JOIN items oi ON o.orderID = oi.orderID
INNER JOIN products p ON oi.productID = p.prod_id
INNER JOIN store s ON o.orderStoreID = s.store_id 
WHERE o.orderDateTime BETWEEN CAST('$todayStart' AS DATETIME) AND CAST('$todayEnd' AS DATETIME)

以下是我用来生成日期的代码。

date_default_timezone_set('Australia/Victoria');
$overnightStart = date("Y-m-d H:i:s", strtotime("yesterday 21:00:00"));
$overnightEnd   = date("Y-m-d H:i:s", strtotime("today 11:59:59"));
$todayStart     = date("Y-m-d H:i:s", strtotime("today 12:00:00"));
$todayEnd       = date("Y-m-d H:i:s", strtotime("today 20:59:59"));

1 个答案:

答案 0 :(得分:0)

我认为你的PHP时区可能有问题。 如果cron作业不使用相同的时区,则可以在cron作业之后写入一些订单,但是在之前的日期。 在您尝试超过1小时后(或更多,增量时区)之后,它就可以了