模型
在我的应用程序的当前模型中,事件可以在几个不可组合的频率上发生,其值的枚举如下:ONCE,DAILY,WEEKLY,MONTHLY,每年,那个(即事件发生)从特定日期开始,可选结束于晚一个(当它们没有结束时,它们的值为NULL)。
例如,一个事件:
有:
USAGE
此数据可以经常通过后台更新。我们的公共页面需要它才能显示所有事件发生的3天时间表,按1小时的时间段收集。
时间表的默认开始时间是今天午夜的日期。 时间表的开始时间可以缩短到当前日期之前的1个月和之后的2个月。
我需要什么
通过后台插入所有事件数据而没有任何问题。 当我需要以时间表方式组织它们时,棘手的部分就出现了。我尝试了一种粗暴的方法(选择所有事件,并自己复制事件),但我有点失败(这引发了每当数据发生变化时每天更新复制事件的大缓存的问题!)。
我真正希望从我这个漂亮的模型(愚蠢的我:我没有想到同时写入和读取查询)是在begin_date和end_date之间发生所有事件,由1-组织小时槽。
你有什么建议?
顺便说一下,模型是开放的,因此可以更改它以便更好地解决问题。一切都在这里讨论。
致以最诚挚的问候,
罗尔夫
P.S。:当前(有趣的部分)模型看起来像:
mysql> describe occurrences;
+----------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| start_date | datetime | NO | | NULL | |
| end_date | datetime | YES | | NULL | |
| frequency_type | varchar(50) | NO | MUL | NULL | |
| event_id | bigint(20) | NO | MUL | NULL | |
+----------------+-------------+------+-----+---------+----------------+
mysql> describe frequency_types;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| value | varchar(50) | NO | PRI | NULL | |
+-------+-------------+------+-----+---------+-------+
答案 0 :(得分:1)
您可以查询所有发生的事件,这些事件的开始位于请求的结束之前,结尾为空或者在请求的开始之后,然后从结果集中复制/计算所有事件。