2

我正在设置一个计划的 cron 作业,每隔一个星期一启动一个 PHP 脚本。我的目标是运行一个 SQL 查询,该查询根据我公司的支付周期返回工作订单——每个支付周期在我运行这个计划的 cron 作业之前的星期五结束。

我有一个 SQL 表,其中列出了我公司的所有支付周期,因此该表有两列:(payperiod_from开始日期范围)和payperiod_to(结束日期范围)。我要提取的工单有一个分配给它们的日期。我希望能够提取日期介于payperiod_from和之间的工单payperiod_to

由于支付周期每隔一个星期五结束,并且这个 cron 工作安排在之后的星期一,我可以简单地使用CURDATE() - 3(星期一 - 星期五前 3 天);获取payperiod_to日期,但是如何运行查询以过滤日期属于正确支付期的工单?

希望这对你们中的一些人有意义。

4

1 回答 1

0

您可能会在尝试为“每隔一周”设置一个 cron 作业时遇到麻烦。这里有一个 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

最后,请注意上面的查询在语法上是正确的,但它们没有经过全面测试。从问题中的信息到实际的表结构,这是一个太大的飞跃。

于 2013-05-31T16:54:41.080 回答