开发/管理/设计重复任务/日历的最佳方式

时间:2010-10-21 21:36:32

标签: php mysql

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

在创建定期任务“模板”(所有单个任务所基于的模板)之后,您是否创建了所有单个任务并将它们存储在数据库中?或者你只是存储“模板”反复发生的事件和他们的例外?

如果用户请求“月”视图,并且您想要显示所有事件/任务,则似乎是从模板实时创建输出,并且包括所有异常将是更多资源如果每个单独的重复任务都是从模板创建并插入到数据库中的话。

这将使搜索/排序等更容易。

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

4 个答案:

答案 0 :(得分:4)

将所有内容存储在数据库中。

您希望拥有一个“任务模板”表和一个“任务”表,其中存在一对多关系。

当用户表示他们想要重新发起任务时,创建一个“任务模板”记录,然后创建与用户指示的一样多的“任务”(不允许用户在将来创建太远的任务) 。每个任务都通过外键链接到任务模板。我们的想法是,在管理这些记录方面,SQL比在基于一个模板的代码中尝试完成所有这些操作更有效。这样,您在排序和过滤数据时可以有更多选项。毕竟,编写SQL查询比编写,测试和维护操作数据的PHP函数更容易。

我会给你的其他一些提示是:

  • 尝试在“任务模板”记录中获取大量信息。保留模板涵盖的任务数,最后一个任务结束的日期,第一个任务和最后一个任务之间经过的时间等。当你想要排序和过滤时,这个“元数据”可以帮助你节省查询时间任务。
  • 在日期和FK字段上添加索引,这也有助于查询时间。
  • 我刚刚在工作中构建了两个日历应用程序,这些应用程序很受老板们的欢迎。我使用了“FullCalendar”JQuery插件(http://arshaw.com/fullcalendar/)。我使用JQuery AJAX来处理我的大多数事件,它内置了对Month,Day和Week视图的支持。

答案 1 :(得分:2)

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

  1. 当用户输入事件时,我存储了事件的日期模式GNU日期样式 - PHP的关键字为relative date formats

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

  3. 然后弄清楚未来还有多远 - 我的想法是在浏览实际页面时创建事件。例如。如果我在2011年6月创建了活动,有人一直跳到2011年7月,我会重复我的活动并透明地设置它们。

  4. 当用户更改相对模式时,提供更新所有后续事件 - 除非他们已经有自定义模式。相对模式使得计算所有这些变得非常容易。

答案 2 :(得分:1)

我曾经遇到同样的问题而不是重新发明轮子,我使用了Google Calendar API。 (http://code.google.com/apis/calendar/data/2.0/developers_guide.html)

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

在Google日历上创建活动时,您将收到一个令牌/ ID,您可以将其存储在自己的数据库中,并在应用程序的上下文中引用它。

答案 3 :(得分:0)

  

如果用户请求“月”视图,并且您想要显示所有事件/任务,则似乎是从模板实时创建输出,并且包括所有异常将是更多资源如果每个单独的重复任务都是从模板创建并插入到数据库中,则密集。

我不同意这一点。如果一个任务在接下来的7年中每个星期六重复怎么办...如果有很多这些重复的任务怎么办?这会花费你很多浪费空间。因此,我认为最好将重复任务保存为每个例外只有一条记录+一条记录(因为除了重复之外的例外情况少)。

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

相关问题