Php 开发/管理/设计周期性任务/日历的最佳方法

Php 开发/管理/设计周期性任务/日历的最佳方法,php,mysql,Php,Mysql,我所说的一个例子类似于谷歌日历。创建新的定期任务时 创建周期性任务“模板”(所有单个任务都基于该模板)后,是否创建所有单个任务并将其存储在数据库中?还是只存储“模板”重复事件及其异常 如果用户请求一个“月”视图,并且您希望显示所有事件/任务,那么似乎从模板实时创建输出,并且包括所有异常,与从模板创建每个定期任务并插入数据库相比,资源密集度要高得多 这将使搜索/排序等变得更加容易 以前有人创造过这样的东西吗?想法 如果用户请求一个“月”视图,并且您希望显示所有事件/任务,那么似乎从模板实时创建输出

我所说的一个例子类似于谷歌日历。创建新的定期任务时

创建周期性任务“模板”(所有单个任务都基于该模板)后,是否创建所有单个任务并将其存储在数据库中?还是只存储“模板”重复事件及其异常

如果用户请求一个“月”视图,并且您希望显示所有事件/任务,那么似乎从模板实时创建输出,并且包括所有异常,与从模板创建每个定期任务并插入数据库相比,资源密集度要高得多

这将使搜索/排序等变得更加容易

以前有人创造过这样的东西吗?想法

如果用户请求一个“月”视图,并且您希望显示所有事件/任务,那么似乎从模板实时创建输出,并且包括所有异常,与从模板创建每个定期任务并插入数据库相比,资源密集度要高得多

我不同意这一点。如果在接下来的7年里,每周六都有一项任务重复会怎样。。。如果有很多重复的任务呢?那会让你浪费很多空间。因此,我认为最好将重复性任务保存为每个异常只保存一条记录+一条记录(因为异常比重复性少)


好的,剩下的唯一问题是如何设置一个查询来选择每个任务(仍在考虑)

我不久前也遇到过同样的问题,我没有重新发明轮子,而是使用了谷歌日历API。(http://code.google.com/apis/calendar/data/2.0/developers_guide.html)

您可以创建一个Google帐户并访问日历信息。存在用于创建/编辑/删除定期条目的API。此外,还可以指定日期/时间信息并查询匹配的事件


当您在Google Calendar上创建事件时,您将收到一个令牌/id,您可以将其存储在自己的数据库中,并在应用程序的上下文中引用它

将其全部存储在数据库中

您希望有一个“任务模板”表和一个“任务”表,其中有一个->多个关系

当用户表示希望任务再次发生时,创建一个“任务模板”记录,然后创建用户所指示的尽可能多的“任务”(不要让用户在太远的将来创建任务)。每个任务都通过外键链接到任务模板。其想法是,SQL在管理这些记录方面将比试图在基于一个模板的代码中完成这一切更高效。这样,在对数据进行排序和筛选时,您将有更多的选择。毕竟,编写SQL查询比编写、测试和维护处理数据的PHP函数更容易

我给你的其他建议是:

  • 尝试在“任务模板”记录中获取大量信息。保留模板覆盖的任务数、最后一个任务结束的日期、第一个任务和最后一个任务之间经过的时间等。。当您希望对任务进行排序和筛选时,此“元数据”可以帮助您节省查询时间
  • 在Date和FK字段上放置索引,这也将有助于查询时间
  • 我刚刚在工作中开发了两个日历应用程序,得到了老板们的好评。我使用了“FullCalendar”JQuery插件(http://arshaw.com/fullcalendar/). 我使用jQueryAjax来处理我的大多数事件,它内置了对月、日和周视图的支持

对于重复发生的事件,我在前一段时间做了以下操作:

  • 当用户输入事件时,我存储了事件的日期模式GNU date style——PHP的关键字是

  • 然后我开始为下一年创建活动。并创建了实际记录,其中我将相对日期转换为实际日期——例如,“每第一个星期一”转换为“mm dd YYYY”。这允许我显示它们,也允许用户移动单个事件或取消一个事件等

  • 然后找出未来的发展方向——我的想法是在浏览实际页面时创建事件。例如,如果我在2011年6月之前创建了事件,而有人一直跳过到2011年7月,我会迭代我的事件并透明地设置它们

  • 当用户更改相对模式时,提供更新以下所有事件——除非它们已经有自定义模式。相对模式使计算所有这些变得超级容易


  • 好的观点。感谢jQuery插件的想法,我将使用它。