我所谈论的一个例子与谷歌日历类似。创建新的定期任务时。
在创建定期任务“模板”(所有单个任务所基于的模板)之后,您是否创建了所有单个任务并将它们存储在数据库中?或者你只是存储“模板”反复发生的事件和他们的例外?
如果用户请求“月”视图,并且您想要显示所有事件/任务,则似乎是从模板实时创建输出,并且包括所有异常将是更多资源如果每个单独的重复任务都是从模板创建并插入到数据库中的话。
这将使搜索/排序等更容易。
之前有人创造过这样的东西吗?想法?
答案 0 :(得分:4)
将所有内容存储在数据库中。
您希望拥有一个“任务模板”表和一个“任务”表,其中存在一对多关系。
当用户表示他们想要重新发起任务时,创建一个“任务模板”记录,然后创建与用户指示的一样多的“任务”(不允许用户在将来创建太远的任务) 。每个任务都通过外键链接到任务模板。我们的想法是,在管理这些记录方面,SQL比在基于一个模板的代码中尝试完成所有这些操作更有效。这样,您在排序和过滤数据时可以有更多选项。毕竟,编写SQL查询比编写,测试和维护操作数据的PHP函数更容易。
我会给你的其他一些提示是:
答案 1 :(得分:2)
对于重复发生的事件,我做了以下一段时间:
当用户输入事件时,我存储了事件的日期模式GNU日期样式 - PHP的关键字为relative date formats。
然后我开始为例如创建事件下一年。并创建了实际记录,我将相对日期转换为实际日期 - 例如“每个第一个星期一”到“mm-dd-YYYY”。这允许我显示它们并且还允许用户例如移动单个事件或取消一个等等。
然后弄清楚未来还有多远 - 我的想法是在浏览实际页面时创建事件。例如。如果我在2011年6月创建了活动,有人一直跳到2011年7月,我会重复我的活动并透明地设置它们。
当用户更改相对模式时,提供更新所有后续事件 - 除非他们已经有自定义模式。相对模式使得计算所有这些变得非常容易。
答案 2 :(得分:1)
我曾经遇到同样的问题而不是重新发明轮子,我使用了Google Calendar API。 (http://code.google.com/apis/calendar/data/2.0/developers_guide.html)
您可以创建Google帐户并访问日历信息。有API可用于创建/编辑/删除定期条目。此外,您可以指定日期/时间信息并查询匹配的事件。
在Google日历上创建活动时,您将收到一个令牌/ ID,您可以将其存储在自己的数据库中,并在应用程序的上下文中引用它。
答案 3 :(得分:0)
如果用户请求“月”视图,并且您想要显示所有事件/任务,则似乎是从模板实时创建输出,并且包括所有异常将是更多资源如果每个单独的重复任务都是从模板创建并插入到数据库中,则密集。
我不同意这一点。如果一个任务在接下来的7年中每个星期六重复怎么办...如果有很多这些重复的任务怎么办?这会花费你很多浪费空间。因此,我认为最好将重复任务保存为每个例外只有一条记录+一条记录(因为除了重复之外的例外情况少)。
嗯,剩下的唯一问题是如何设置一个查询来选择每个任务(仍在考虑那个)