2011-12-10 67 views
0

我正在實施一個酒店預訂網站,酒店業主可以根據實際情況預訂客房。檢查可用客房的數量,我這樣寫代碼:BETWEEN不適用於MySQL

$q=" SELECT * 
     FROM tbl_roombook 
     WHERE 
     hotel_id='$h_id'AND 
     start_date 
     BETWEEN '$date1' 
     AND '$date2' 
     AND end_date 
     BETWEEN '$date1' 
     AND '$date2' 

    "; 
$res = $this->db->returnArrayOfObject($q); 
//var_dump($res); 

在我的數據庫2客房預訂從2011-12-25到2011-12-31。而我的echo $date12011-12-29$echo date22011-12-30。但$q返回空結果!爲什麼?

+1

哪些列類型start_date'和'end_date'的'? – deceze

+0

他們在約會 – Boruah

+0

你有沒有得到任何SQL錯誤?查詢在MySQL客戶端還是在phpMyAdmin中工作? – miq

回答

0

對於您給它的示例應該返回沒有結果... start_date = 2011-12-25並且不在2011-12-29和2011-12-30之間,所以表達式在這裏是錯誤的。我想你想要的是看看預訂範圍和新的預訂範圍是否有重疊?

要做到這一點,你會想,而不是檢查

start_date > '$date2' OR end_date < '$date1; 

假設$日期1總是$ DATE2之前。

0

該示例將不會返回您提供的date1date2條目的結果。那是因爲假設你的start_date = 2011-12-25end_date = 2011-12-31
這兩個值都不在您提供的日期範圍內2011-12-29 and 2011-12-30
因此沒有結果產生。 你可以使用它在相反的方式

'$date1' BETWEEN start_date AND end_date 
OR '$date2' BETWEEN start_date AND end_date