PHP MYSQL为jquery日历创建没有重复结束日期的事件

时间:2013-05-15 06:28:42

标签: php mysql jquery recurrence

我在尝试什么!

我正在使用jquery,php和mysql创建一个事件日历。创建的事件存储在mysql数据库中,然后重新获取并显示在日历中。事件包含开始和结束日期。如果用户想要创建一个例如一周重复的事件,那么他可以使用日历的重复属性并将重复结束日期设置为从事件开始的一周。

我被阻止的地方!

假设用户需要一个周期性事件,其结果如生日或每周重复一次的每周事件。在这种情况下,我认为将每个事件插入数据库多年并不是一个好方法。让我们看另一个案例,用户创建2年的每日重复事件。这里数据库将变得非常人满。

我在寻找什么!

有人可以告诉我如何使用无结束日期非常长的结束日期管理重复活动。

1 个答案:

答案 0 :(得分:0)

也许你需要三张桌子

  • event_base
    • 包含活动,名称,地点,持续时间和详细信息等。
  • event_instance
    • 对于重复发生的事件的实际情况
    • 仅在用户尝试查看该月/周/日等时创建实例
    • 仅在该日期不存在实例的情况下创建实例
    • 有原始日期和当前日期(如果此实例可以移动)
  • event_reoccurrence表
    • 带有结束日期字段。如果结束日期为空,则没有结束日期。

以下是一个示例event_instance表架构

  1. event_base_id
  2. event_reoccurrence_id (如果没有重新出现,则为null)创建事件的规则。
  3. original_created_for_date (如果用户移动实例,则不会重新添加到原始日期)
  4. current_date (日历上显示的日期
  5. location_override
  6. duration_override
  7. 其他覆盖等
  8. 这是一个示例event_reoccurrence表模式(重新发生规则)

    1. event_reoccurrence_id
    2. event_base_id (unsigned int)
    3. day_of_week varchar(20)
    4. day_of_month varchar(20)
    5. day_of_year varchar(20)
    6. week_of_month varchar(20)
    7. week_of_year varchar(20)
    8. months_of_year varchar(20)
    9. varchar(20)
    10. lastdate_of_reoccurrence 日期
    11. #2 - #8中的值可以是单个数字,范围“2-6”,用逗号分隔的数字或null。

      • null表示无关紧要(无论此值如何都可能发生事件)
      • 某个号码:事件发生在该日期与该号码匹配的日期
        • 工作日:5 =事件不能在星期五以外的日子发生
      • 以逗号分隔的数字:当任何数字现在匹配时发生事件
        • 月:2,4,5 = 2月,4月和5月可能发生的事件
      • 范围:事件发生在范围之间
        • 每月的天数:1-12 =事件可以发生在每个月的第1天到第12天
      • 当每个非空字段匹配时,该事件发生在该日期的日期。

      因此,如果您检查日期并且每个字段都为空或与该日期匹配,则事件发生在该日期。也许每个事件可以有多个条目来构建复杂的模式。

      每个月的第一天是7天,而不是第一个星期天。如果week_of_month为3,星期几为2,除了事件ID之外其他所有内容都为空,就像每个月的第三个星期二一样。

      然后,当此人查看日历时,您会针对该月的每一天请求所有重复发生的事件,并为每个匹配的事件创建实际事件