我正在尝试创建一个活动日历,虽然最初很小,但可能会变得很大。为此,当尽可能多地尝试对它进行未来证明时,过去发生的所有事件都将从数据库中删除。但是,一旦发生重复事件以指示下一个事件何时开始,就更改它们的开始日期是不好的做法吗?这使得执行搜索查询变得更容易,因为理论上没有事件会在过去一周内开始,具体取决于数据库的更新频率。
有一个更好的方法吗?
我目前的意图是有一个表格列出事件的详细信息以及一列是每年、每月、每周还是每天重复。然后当有人搜索两个日期之间的事件时,我只需查看每一行并检查是否 (EVENT START <= SEARCH FINISH && EVENT FINISH >= SEARCH START)。然后这会获取所有可能的事件,然后需要检查重复发生的事件以查看它们是否在给定的时间段内发生。关于如何具体实现这一点,这是我有点困惑的地方。我的想法如下:
每年:如果事件开始 + 1 年 <= 搜索结束 || 活动结束 + 1 年 >= 搜索开始;重复 +2 年等,直到事件开始 + 没有年份 > 搜索完成。
每月:同上,但每次 + 1 个月。
每周:如上所述,但事件开始和事件完成将在每次迭代之间增加 7 天,直到事件开始 + 7 天重复 > 搜索完成。
每日:如上所述,但没有天数差异,而不是一周的 7 天。这可用于指定每 14 天(两周)、每 10 天之类的内容。甚至每周都可以使用这种方法。
但是,当我考虑为实现这一点而必须构建的查询时,我不禁认为它会非常麻烦并且可能很慢。有没有更好的方法来达到我想要的结果?我仍然没有找到一种方法来处理每月的第一个星期一或每月的最后一个星期五或每年四月的第二个星期六发生的事情。这些后一种选择甚至可能吗?
-- 编辑:添加如下:
如果我对我正在创建的内容进行更多解释,可能会有所帮助。这样就可以给予指导。
我正在创建一个网站,允许组织添加事件,无论它们是一次性的还是重复的(每天、每周、每月、一个月的第一个星期二等)。然后,该网站的用户将能够在设定的日期或两个给定的日期(可能相隔 1 天到相隔几年(很明显,未来的事件将很少或不存在,具体取决于使用的日期)。
EVENTS 表本身目前包含有关事件的大量信息,例如位置、成本、年龄组等。最好将其放在单独的表中,一旦确定事件是否在指定的搜索参数?显然,在详细的页面查看之前不需要所有这些信息,可能只是名称、位置、成本和简要说明。
我很欣赏有很多方法可以给猫剥皮,但我不确定如何给这只猫剥皮。我正在努力解决的最大问题是如何构造我的数据,以便查询知道递归是否在指定日期内。此外,鉴于计算 2 lat/longs 之间距离的数学相对复杂,我需要能够将此计算构建到我的查询中,否则我将在 PHP 中进行计算。当然,以这种方式处理的结果会更少,但仍然需要这样做。
非常感谢任何进一步的建议。