gpt4 book ai didi

mysql - 根据存储在数据库中的用户定义的计划查找下一次任务应该运行的时间

转载 作者:行者123 更新时间:2023-11-29 14:35:56 24 4
gpt4 key购买 nike

我有一个应用程序,允许人们为特定时间和日期的特定事件设置警报。例如:-有两个事件 - A 和 B,这些事件在一周的某些日子重复发生,这些事件的时间表如下:

事件 A - 每周日、周一和周三上午 7 点和晚上 9 点举行。
事件 B - 每周日和周二上午 6 点和晚上 8 点举行。
事件 C - 每周一、周三和周四上午 8 点和晚上 9 点举行。

用户会看到一个表单,他可以在其中选择日期并输入与所有所选日期相同的时间。他可以根据需要创建任意数量的事件。

到目前为止,我在数据库中为每一天创建了 7 列,为时间创建了一列。我知道我可能会让事情变得不必要的复杂。上述数据表示为

EventNAME SUN MON TUE WED THU FRI SAT Timings
A 1 1 0 1 0 0 0 7,21
B 1 0 1 0 0 0 0 6,20
C 0 1 0 1 1 0 0 8,21
现在,由于某种原因,我必须找到事件发生的下一个最近的日期和时间,例如:如果今天是星期三早上 6 点,我必须将下一个最近的事件作为事件 a - 早上 7 点获取。在星期三早上 8 点,我必须在早上 8 点获取下一个最近的事件作为事件 C。

如何从这样的模式中获取下一个最近的日期和时间?有更好的表格设计方法吗?

最佳答案

我将使用第二个包含两列的表:(event_id, next_run_time)

每当您将事件添加到计划表时,请计算该事件下一次触发的时间。为此构建一个函数。逻辑是:

  • 查看任务是否需要在今天运行(今天的列是 1,其中一个计时是在未来)
  • 如果没有,请寻找应该触发的第二天,第一个时间。

然后弄清楚需要运行什么是一个简单的问题(伪sql):

select (for update) event_id from next_run_times where next_run_time < now

每当您触发任务时,请使用您之前构建的相同函数更新其下一次运行时间。

小心:如果“调度程序”同时运行,您将需要某种形式的锁定来防止任务运行两次。

我不确定为一周中的每一天设置一个列是否有用,除非您想专门查询“周三安排的作业”。根据您的编程语言和确切的查询需求,更紧凑的格式(例如,最后一个任务的带有 0101100 的纯字符串)可能更实用。 (或者可能使用(event_id,day_number,timing)(单数“timing”)重新设计该表,选择“下一个运行时”会更容易。)

关于mysql - 根据存储在数据库中的用户定义的计划查找下一次任务应该运行的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9052366/

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