2013-09-30 81 views
1

我正在为预订日历创建REST API,现在我正试图找出编写查询的最有效方式,该查询以15分钟的时间间隔返回两个日期之间的所有时间戳。如果我提供2013-09-212013-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 

然后,我会用这个查询作为子查询,并应用它的一些条件,以除去工作时间以外的时隙(不是常数),预约时隙,等

我看到了很多博客文章作者创建一个“日历表”存储所有这些时间戳,但这似乎是浪费给我,因为该数据不需要存储。

关于如何做到这一点或更好的方式来获取/存储数据的任何建议?

+1

将时间存储为[UNIX时间戳](http://en.wikipedia.org/wiki/unix%20timestamp)(只是一个整数)间隔900(15 x 60秒)。检索数据时,使用[from_unixtimestamp](http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_from-unixtime)函数来获取人类可读的日期。 – Nikhil

+0

这是可以肯定的,但如果可以编写一个查询来即时创建这些数据,那么这将是首选。 –

+0

http://stackoverflow.com/questions/186756/generating-a-range-of-numbers-in-mysql。也许你可以调整它以逐步生成值。 – Nikhil

回答

0

这是一个生成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的帖子表。没有什么能阻止你制作这样的表格,并且如果没有更好的方法做一个单一的递增整数的列(我是一个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行