我正在设置一个计划的cron作业,每隔一个星期一启动一个PHP脚本。 我的目标是运行一个SQL查询,该查询根据我公司的工资期返回工作订单 - 每个工资期在我运行此计划的cron工作之前的星期五结束。
我有一个SQL表,其中列出了我公司的所有付款期,因此该表有两列:payperiod_from
(开始日期范围)和payperiod_to
(结束日期范围)。我要拉的工单有一个分配给他们的日期。我希望能够将工作日期介于payperiod_from
和payperiod_to
之间。
由于支付期间每隔一个星期五结束,而这个cron工作安排在此后的星期一,我可以简单地使用CURDATE() - 3
(星期一至星期五前3天);获取payperiod_to
日期,但如何运行查询过滤日期属于正确付款期的工单?
希望这对你们中的一些人有意义。
答案 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
最后,请注意上述查询在语法上是正确的,但它们尚未经过全面测试。从问题中的信息到实际的表格结构,这是一个太大的飞跃。