gpt4 book ai didi

php - MySQL:具有重复任务的传输规划器

转载 作者:可可西里 更新时间:2023-11-01 07:37:31 25 4
gpt4 key购买 nike

我正在研究交通规划器。我的 MySQL(i)/PHP 知识(非常)基础。

我想显示一个包含某一天所有任务的 HTML 表格。但问题是有些任务需要重复(直到我删除整个任务),所以任务的频率如下:一次、每天、每周、每两周和每月。

当然,当我每周一在星期一添加新任务时,该任务必须每个星期一返回到我的表中。

我应该结合这样的东西吗:

SELECT * FROM planner 
WHERE frequency = `once`
AND date = CURDATE()

SELECT * FROM planner
WHERE frequency = `daily/weekly/two-weekly/monthly/yearly`
AND day = DAYOFWEEK(CURDATE())
AND date + INTERVAL 1 DAY/1 WEEK/2 WEEK/1 MONTH

如果是这样,那又如何呢?

希望有人能帮助我。

编辑:

像这样的查询(可能仍然很糟糕)将执行一次、每日和每周任务:

(SELECT *
FROM planner
WHERE frequency = 'once'
AND date = NOW())
UNION
(SELECT *
FROM planner
WHERE frequency = 'daily'
AND date + INTERVAL 1 DAY)
UNION
(SELECT *
FROM planner
WHERE frequency = 'weekly'
AND day = DAYOFWEEK(CURDATE())
AND date + INTERVAL 1 WEEK)

不过,对于“两周一次”和“每月一次”INTERVAL + 2 周/1 个月,每周 将返回结果。如何解决这个问题?

编辑:

我没有在我的表中使用有效性列,因为我不知道过期/无效的过去任务。我将笔记本电脑的年份更改为 2040 年,确实出现了 mysql 错误。我已经改变了计划,我认为重复任务最好一年有效,可以选择删除或延长一年。然后我也忘了提到,当我在星期一创建一个每月频率的任务时,该任务会在下个月的第一个星期一返回到我的表中。当我尝试您的解决方案时,频率为“一次”的任务每天都会出现在我的表格中。

编辑

@SparKot,通常每月查看一次任务,例如 2013-03-05,下一次是 2013-04-05、2013-05-05 等等。尽管在此计划程序中设置了月度任务示例,但星期二 2013-03-05 应该会在下个月的第一个星期二重新出现(4 月:2013-04-02,5 月:2013-05-07,6 月:2013-06- 04).

最佳答案

假设表中有validity列:

SELECT *
FROM planner
WHERE now() >= valid_from
AND now() <= valid_to
AND (frequency = 'daily'
OR (frequency = 'once' AND date(now()) = date)
OR (frequency = 'weekly' AND 0 = (abs(datediff(now(), date)) % 7))
OR (frequency = 'two-weekly' AND 0 = (abs(datediff(now(), date)) % 14))
OR (frequency = 'monthly'
AND ceil(dayofmonth(now())/7) = ceil(dayofmonth(date)/7)
AND dayofweek(now()) = dayofweek(date))
);

没有有效性列:您可能会得到尚未删除的过期/无效的过去任务:

SELECT *
FROM planner
WHERE (frequency = 'daily'
OR (frequency = 'once' AND date(now()) = date)
OR (frequency = 'weekly' AND 0 = (abs(datediff(now(), date)) % 7))
OR (frequency = 'two-weekly' AND 0 = (abs(datediff(now(), date)) % 14))
OR (frequency = 'monthly'
AND ceil(dayofmonth(now())/7) = ceil(dayofmonth(date)/7)
AND dayofweek(now()) = dayofweek(date))
);

关于php - MySQL:具有重复任务的传输规划器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15200929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com