2013-09-30 79 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行