我需要根据Zend / MySQL中的几个日期选项实现一个相当复杂的查询,并且很乐意从那些不像我一样陷入我的代码的人那里得到一些建议:)
我有一个表“event_dates”,日期描述与我的应用中的事件模型相关联。每个活动都可以有多个活动日期,而且可能会有相当复杂的设置。
可配置且与此问题相关的内容如下:
我正在尝试在编码之前写下查询,因此我清楚地了解了所需要的内容 - 但是有一些组合我无法在没有预先编码可能日期列表的情况下处理
你将如何实现这一点 - 理论上,不要在这里要求特定的代码(还是:))。你会在PHP中创建一个可能的命中列表,然后以一种更简单的方式查询它们,或者你宁愿做一个二十世纪和二十几岁的复杂查询等等吗?
感谢您的时间
PS:这可能会有所帮助 - >
CREATE TABLE `event_dates` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`events_id` int(11) NOT NULL,
`datetime_from` datetime DEFAULT NULL,
`datetime_to` datetime DEFAULT NULL,
`date_from` date DEFAULT NULL,
`date_to` date DEFAULT NULL,
`time_from` time DEFAULT NULL,
`time_to` time DEFAULT NULL,
`date_type` tinyint(4) NOT NULL DEFAULT '0',
`frequency_in_weeks` tinyint(4) DEFAULT NULL,
`nth_wday_in_month_week` tinyint(4) DEFAULT '0',
`nth_wday_in_month_wday` tinyint(4) NOT NULL DEFAULT '0',
`is_mondays` tinyint(1) NOT NULL DEFAULT '0',
`is_tuesdays` tinyint(1) NOT NULL DEFAULT '0',
`is_wednesdays` tinyint(1) NOT NULL DEFAULT '0',
`is_thursdays` tinyint(1) NOT NULL DEFAULT '0',
`is_fridays` tinyint(1) NOT NULL DEFAULT '0',
`is_saturdays` tinyint(1) NOT NULL DEFAULT '0',
`is_sundays` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
答案 0 :(得分:1)
我已经使用日历应用程序走了这条路,最终决定将每个事件实例存储在数据库中。
对于应用程序的这一部分,有两个表...一个用于存储事件信息(标题,描述等),一个用于每个实例(id,开始日期/时间,结束日期/时间)等等。)。
缺点是事件真的必须在未来的某个时刻结束,无论是从现在开始的一个月,还是从现在开始的50年。您可以在将来为“无限重复”事件选择一个任意日期,但这取决于您的应用程序是否合适。
好处很多。您可以快速访问事件的日期/时间,而无需动态计算...它已经在数据库中!它使代码的其余部分变得非常简单。
您选择的路线取决于您,但我发现通过保持简单快速,每个人都非常高兴。
答案 1 :(得分:0)
如何使用Google日历API?谷歌支持所有类型的重复活动,并且在zend框架中已经有一个内置的库。 http://framework.zend.com/manual/en/zend.gdata.calendar.html
我们也尝试过定制的重复活动,并且在它太多了之后放弃了。编辑活动是一个发展的噩梦。我们会尽快切换到此API。