【问题标题】:Best Approach for an Event Calendar in PHP/MySQL [closed]PHP / MySQL中事件日历的最佳方法[关闭]
【发布时间】:2012-10-05 15:35:10
【问题描述】:

我正在使用 MySQL 和 PHP 编写活动日历。

我已经设置了一个包含日期和时间的表格,并且日历运行良好。我必须为多个房间制作一个活动日历,所以我想我必须为每个添加到数据库的新房间创建一个表。

考虑到我的日历以半小时为间隔,我的索引列是这样的:2010-1-1 00:00:002010-1-1 00:30:002010-1-1 01:00:00 等等,大约 25 年后的未来。还有另一列包含事件 ID。

我认为每次添加房间时都会花费太多时间和空间,因为必须创建一个新的 HUGE 表。有没有更简单的方法?

【问题讨论】:

  • 事件是否适合 1 30 分钟的间隔,或者它们是否跨越多个间隔?
  • 它们可以适应多个 30 分钟的间隔,例如,如果我添加一个持续 3 小时的事件,则需要 5 行。例如。 00:00:00 - 00:30:00 - 01:00:00 - 01:30:00 - 02:00:00 - 02:30:00。
  • 我觉得这种做法很麻烦。为什么不为事件创建一个开始/结束日期时间戳?您可以在适当的日期查询和放置事件,同时将日历的其余部分呈现为空白。为什么需要提前生成间隔?
  • 房间可以有多个事件,事件将有一个event_id,room_id,title,start_date,end_date等。您可以一次查询拉出1个房间的所有事件,如果需要,按天分组等。
  • 是的,我的想法是,我必须在那些日期检查“房间”是否忙,所以它们之间的事件不会重叠,我明白你的想法,我不是在 DB 方面非常有经验。所以,如果你对此有任何建议。我很乐意阅读它。

标签: mysql database datetime calendar


【解决方案1】:

如果您创建包含以下内容的事件表:

event_id, room_id, title, start_date(datetime), end_date(datetime)

然后您可以检查房间 1 是否在上午 11:30 到下午 1:30 之间被占用:

select count(event_id) from events where room_id = 1 and ((end_date > '2012-10-02 11:30:00')
AND (start_date < '2012-10-02 13:30:00'));

任何大于 0 的值都表示该日期时间范围内房间 1 中的现有事件。或者您可以返回冲突事件并通过选择 * 而不是 count(event_id) 将其显示给用户

【讨论】:

  • 是的,但是,如果我在同一天的不同时间举办多个活动,例如房间 1:活动 1 从下午 1 点到下午 3 点,然后活动 2 从下午 4 点到下午 6 点。我在想,我应该在 date_time 级别进行比较,以完成这个,我不太确定,但我一定会尝试这个。
  • 对,开始日期和结束日期,都是日期时间,不管怎样都行。我刚刚打电话给他们约会,我会更新我的答案。
  • 好吧,我会试试这个,我会在星期一回来,告诉你我的结果。非常感谢。
猜你喜欢
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
相关资源
最近更新 更多