2016-08-06 13 views
-2

ゲストチェックインとチェックアウトの範囲にある場合、予約テーブルからすべての詳細を取得したいと考えています。ゲストが選択したチェックイン日は 'new_date_in'で、チェックアウト日は 'new_date_out'です。SQL検索エラー

$SQL="SELECT * FROM bookings WHERE roomid = '$roomid' AND ((bookings.checkindate < '$new_date_in' AND bookings.checkoutdate >= '$new_date_in') 
      OR (bookings.checkindate < '$new_date_out' AND bookings.checkoutdate > '$new_date_out') 
      OR (bookings.checkindate >= '$new_date_in' AND bookings.checkoutdate <= '$new_date_out' )) ; 

enter image description here

バールの問題は、範囲内にないこの取得初期の頃です。

Ex。ゲストは部屋のID 3

の2016年9月28日として、2016年9月25日と「new_date_out」として「new_date_in'を選択した場合、それは、この出力

534 
2016-09-08 
2016-09-10 
535 
2016-08-03 
2016-08-05 

を返すには、出力として返すべきではありません。私のSQLクエリをチェックして修正してください。

ありがとうございます。

+0

これはどのRDBMSですか? 'mysql'、' postgresql'、 'sql-server'、' oracle'、 'db2'のどれかを指定するタグを追加してください。 –

答えて

0

私にとってうまく動作します。

CREATE TABLE bookings (
    bookingid int primary key not null, 
    checkindate date not null, 
    checkoutdate date not null, 
    roomid int not null, 
    guestid int not null, 
    qty int not null 
); 

insert into bookings (bookingid, checkindate, checkoutdate, roomid, guestid, qty) 
values 
    (524,'2016-08-01','2016-08-03',2,85,1), 
    (525,'2016-10-12','2016-10-15',3,86,1), 
    (526,'2016-07-23','2016-07-31',2,87,3), 
    (527,'2016-07-26','2016-07-28',1,88,1), 
    (533,'2016-07-28','2016-08-02',2,96,1), 
    (534,'2016-09-08','2016-09-10',3,97,1), 
    (535,'2016-08-03','2016-08-05',3,98,2); 

SELECT * 
FROM bookings 
WHERE roomid = 3 
    AND (
      (bookings.checkindate < '2016-09-25' AND bookings.checkoutdate >= '2016-09-25') 
     OR (bookings.checkindate < '2016-09-28' AND bookings.checkoutdate > '2016-09-28') 
     OR (bookings.checkindate >= '2016-09-25' AND bookings.checkoutdate <= '2016-09-28') 
    ) 

SQLロジックエラーではありません。そのため、次のような問題が発生する可能性があります。

  1. データ型に問題があります。データフィールドに正常なデータ型を使用しなかった場合、予期しない結果が生じる可能性があります。私はあなたのテーブル定義を見ることができません。
  2. アプリケーションの文字列連結に問題があります。パラメータを使用するはずの理由があります。実行する前に$SQLを見てください。
+0

私はチェック。あなたの努力に感謝します。 –