我正在为预订日历创建REST API,现在我正在尝试找出编写查询的最有效方法,该查询以15分钟的间隔返回两个日期之间的所有时间戳。如果我提供2013-09-21
和2013-09-22
,我希望获得:
2013-09-21 00:15:00
2013-09-21 00:30:00
2013-09-21 00:45:00
2013-09-21 01:00:00
2013-09-21 01:15:00
2013-09-21 01:30:00
...
2013-09-22 23:15:00
2013-09-22 23:30:00
2013-09-22 23:45:00
然后,我会使用这个查询作为子查询,并在其上应用一些条件来删除工作时间以外的时隙(不是恒定的),预订的时隙等。
我看过很多博客文章,作者创建了一个“日历表”来存储所有这些时间戳,但对我来说这似乎是一种浪费,因为这些数据不需要存储。
对于如何做到这一点,或者获取/存储数据的更好方法,有什么建议吗?
发布于 2013-10-01 01:00:57
下面是一个过程,它生成95行,并在执行过程中递增一个日期变量,然后将带有日期的条目的表与生成日期行的“实体”表连接在一起。
select str_to_date('2010-01-01', '%Y-%m-%d') into @ad;
select * from
(select (@ad := date_add(@ad, INTERVAL 15 MINUTE)) as solid_date from wp_posts limit 95) solid
left join
wp_posts
on solid.solid_date = post_date
我不知道如何在mysql中生成任意数量的行,所以我只是从一个超过95行的表中进行选择(24小时*每小时4个约会,午夜减去一个) --我的wordpress post表。如果没有更好的方法(我是oracle专家,而不是mysql专家),那么没有什么可以阻止您创建这样一个表,并且只有一个列包含一个递增整数。也许没有一个:How do I make a row generator in MySQL?
在您看到wp_posts的地方,替换您的约会表的名称。在你看到日期的地方,替换你的开始日期。
上面的查询生成一个日期列表,从所选日期的午夜后15点开始(在我的示例中为2010-01-01)
如果只想查找空闲插槽,则可以添加WHERE appointments.primary_key_column_here IS NULL
请注意,您的规格中没有包括午夜。如果您希望在第一天午夜,请在15分钟之前在变量中开始日期,并将自己限制为96行。如果您希望在最后一天的午夜,只需将自己限制在96行
https://stackoverflow.com/questions/19088659
复制相似问题