2014-10-30 65 views
0

我正在創建一個課程預訂系統。我在名爲lesson_date_time的數據庫中有一個日期,它使用mysql日期時間,每個課程將持續一段時間。 (我不存儲結束日期,因爲分鐘不同)使用PHP/MySQL防止重複預訂檢查datetime

爲了防止存儲的日期時間加上所需的分鐘的任何雙重預訂,我似乎無法弄清楚將做檢查,看看這次期間存在

我現在有...

$mins = "60"; 
$date_start = "2014-10-30 12:40:00"; 
$date_end = date("Y-m-d H:i:s", strtotime("$date_start + $mins minute")); 

WHERE lesson_date_time BETWEEN CAST('$date_start' AS DATETIME) AND CAST('$date_end' AS DATETIME) 

這確實檢查和有點兒工作,但是沒有趕上其在一小時的開始日期的任何條目(或時間段才結束日期)後$ start_date。

也試過

WHERE lesson_date_time >= '$date_start' and lesson_date_time =< '$date_end 

不找到任何結果,即使他們退出。

是否有可能做我想做的事情還是僅僅是比較容易,如果我儲存的教訓結束時間去從那裏

回答

1

之間你

WHERE lesson_date_time BETWEEN CAST('$date_start' AS DATETIME) AND CAST('$date_end' AS DATETIME)

將equivilent到

WHERE lesson_date_time >= CAST('$date_start' AS DATETIME) AND lesson_date_time <= CAST('$date_end' AS DATETIME)

這仍然是行不通的,因爲你只是在尋找經驗教訓,將在本課中開始。你將不會得到正在繼續這一課的內容。爲了得到這些,你必須存儲結束日期(更容易)或存儲課程長度。

如果所有的課程都是60分鐘,你可以做類似的事情。

$mins = "60"; 
$date_start = "2014-10-30 12:40:00"; 
$old_lesson_start = date("Y-m-d H:i:s", strtotime("$date_start - $mins minute")); 
$date_end = date("Y-m-d H:i:s", strtotime("$date_start + $mins minute")); 

WHERE lesson_date_time BETWEEN CAST('$old_lesson_start' AS DATETIME) AND CAST('$date_end' AS DATETIME) 

然後,它會捕捉到60分鐘前開始的課程,因此將繼續學習本課。

如果您決定存儲長度或結束日期,我們可以幫助您解決SQL問題。