2011-12-10 11 views
0

私はホテルのオーナーが空室状況に応じて客室を予約できるホテルの予約サイトを実装しています。私のデータベース2部屋で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); 

2011年12月25日から2011年12月31日に計上されています。利用可能なお部屋の数を確認するために、私のようなコードが書かれています。そして私のecho $date12011-12-29であり、$echo date22011-12-30です。しかし、$qは空の結果を返します!どうして ?

+1

でそれを使うだろうか? – deceze

+0

現在の日付形式です – Boruah

+0

SQLエラーはありますか?クエリはMySQLクライアントまたはphpMyAdminで動作しますか? – miq

答えて

0

この例では、結果は返されません。 start_date = 2011-12-25 2011-12-29と2011-12-30の間ではないので、式は正しくありません。あなたが望むのは、予約された範囲と新しい可能な予約範囲の間に重複があるかどうかを確認することです。あなたが代わりに$のDATE1が$ date2の前に常にあると仮定し

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

をチェックしたくなるでしょう。これを行うために

0

この例では、提供しているdate1date2のエントリの結果は返されません。これは、あなたのstart_date = 2011-12-25end_date = 2011-12-31と仮定しているからです。
両方の値のいずれも、指定された日付範囲2011-12-29 and 2011-12-30の範囲内にありません。
したがって、結果は生成されません。 あなたがstart_date`と `` end_date`の列の型がどのようなものがあり逆に

'$date1' BETWEEN start_date AND end_date 
OR '$date2' BETWEEN start_date AND end_date 
関連する問題