我使用一個自定義的PHP函數產生視覺日曆的單月,基於包含一個起始日期的表,和持續時間阻擋了日期 - 例如:針對預訂日期打破月末的SQL查詢?
...這是由數據產生的,表中應該從14日開始4天,從27日開始7天。
查詢看起來是這樣的:
SELECT GROUP_CONCAT(DATE_FORMAT(start_date,'%d'),':', event_duration) AS info
FROM events
WHERE YEAR(start_date = '2012'
AND MONTH(start_date) = '07'
ORDER BY start_date
(你可以放心地忽略組CONCAT並返回數據作爲單獨的行,這並不重要)。
我正在尋找一個修改的查詢,如果一個事件在上個月開始時會阻止在月初的日期,但它的長度會將其納入以下內容。
例如 - 在上面的例子中,27日的事件實際上預定在數據庫中持續7天,所以如果我運行MONTH(start_date) = '08'
的查詢,我想說前兩個日期被阻止,他們目前不會,因爲阻止它的開始日期不在被選中的月份。
我很確定有一個子查詢或其中的某些內容來抓取行,但我無法想到它。任何接受者?
編輯
下面從薩爾曼回答指出我我想要去的directon,我想出了這個從上月獲得結轉庫存量的方式來顯示爲「1」用的剩餘天數月份的:
SELECT IF(MONTH(start_date) < '08', '2012-08-01', start_date) AS starter,
IF(MONTH(start_date) < '08', duration - DATEDIFF('2012-08-01',start_date), duration) AS duration
FROM EVENTS
WHERE YEAR(start_date) = '2012'
AND (MONTH(start_date) = '08' OR MONTH(start_date + INTERVAL duration DAY) = '08')
顯然有很多的變數存在於PHP來代替,所以也許有一個更好的方法?
更多信息 - 我不想選擇上個月的實際開始日期(因爲該功能只適用於某個日期)。因此,對於7月27日的7天事件,AUGUST的查詢應該返回8月1日的日期,以及2天的時間(對於7天事件發生的8月的2天)。 – Codecraft 2012-07-08 20:49:27