根据表中指定的日期范围按日期过滤记录

时间:2013-05-31 16:34:27

标签: php mysql sql cron

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

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

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

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

1 个答案:

答案 0 :(得分:0)

尝试为#34;每隔一周设置一个cron作业可能会遇到麻烦"。有一个关于here的StackOverflow答案;请注意答案下的评论。

至于选择日期属于正确支付期的工单,如果您已在CURDATE()前三天计算支付期结束,为什么不忘记pay_periods表(或其任何名称)并计算从CURDATE()之前16天开始的支付期:

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

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