我正在使用PHP和MySQL在网站上实现一个相当简单的日历。我希望能够处理无限期重复的日期,并且不确定最佳方法。
对于时间有限的重复事件,将时间范围内的每个事件添加到我的db表中并使用某种形式的递归ID对它们进行分组似乎是有意义的。
但是当事件重复的频率没有限制时,
更好a)将记录放入数据库中一段特定的时间范围(例如接下来的两年),然后随着时间的推移定期检查并添加新记录 - 问题在于,如果有人提前3年,事件不会出现
b)实际上并没有每个事件的记录,而是当我在我的PHP代码中检查指定时间段内的事件时,计算在这段时间内会发生重复事件 - 这个问题是它意味着那里不是每个事件的特定记录,当我想要将其他信息(出勤等)与该事件相关联时,我可以看到这是一种痛苦。它似乎也有点慢......
有没有人试过这些方法?如果是这样,它是如何运作的?还是有一些其他巧妙的狡猾方法我错过了?
答案 0 :(得分:1)
我会采取方法b,如果有人添加了某些内容,我会创建一个“真实”的事件条目。
编辑: 您期望有多少周期性事件以及将会是哪种周期性事件? (例如:每个星期一,每两周等)。
答案 1 :(得分:1)
我会为重复的事件创建一条记录。然后,如果必须将更多信息添加到特定日期,我将为附件创建一个记录,并引用重复事件。
答案 2 :(得分:1)
选项B的第三次投票 - 理由是只能在有限的时间范围内(即开始和结束)查询数据。出于性能原因,我建议除了存储第一次出现的日期/时间,出现的次数以及您在数据库中最后一次出现的次数。
下进行。
答案 3 :(得分:0)
根据我的经验,生成重复日期并检查特定日期是否在该模式中并不是那么糟糕的性能。一年只有365天。 10,000天已近30年。这意味着,在实际情况中,输入/输出的大小相对较小。
这个库可能会有所帮助(但它是javascript):http://github.com/mooman/recurring_dates