-5

キャンセル済みの部屋がまだあるのはなぜですか? 誰かが私を助けてくれますか?これの正しい構文は何ですか?

$que=mysql_query("SELECT * from roomreservation where roomtype='$roomtype' and name='$name' and status != 'cancelled' and  

arrival > '$arrival' and arrival < '$departure' and
or
departure >'$arrival' and  departure <'$departure' and
or
'$arrival'  > arrival and '$arrival' < departure and
or
'$departure' > arrival and '$departure' < departure and
or
'$arrival' = arrival and '$departure' = departure and
or
'$arrival' = arrival or '$departure' = departure and


");

$num_rows = mysql_num_rows($que);
if($num_rows >0)
    {   $error="Room Already Reserved <br/>Please Choose another date";
        header("location:rescheduleroom.php?    id=$id&type=$roomtype&roomnumber=$name&error=$error");
            }
4

2 に答える 2

1

あなたの論理は非常に複雑です。それはこれだけに要約することができます:

SELECT ...
WHERE roomtype='$roomtype' and name='$name' and status != 'cancelled'
   and ('$departure' >= arrival) and ('$arrival' <= departure)

基本的に、次のものがあります。利用可能/利用不可の部屋、および潜在的な到着/出発日がその利用可能性とどのように重複するかについての一連のオプション

room:      ........XXXXXXXXX.......   <--- . = available, X = in use
         1    A  D
         2       A    D
         3           A    D
         4              A      D
         5                    A   D

ケース1と5は明らかに利用可能です-A/Dタイムポイントは部屋の利用不可と重複しません。2,3,4は大きなもので、ブラックアウト期間と部分的/完全に重複しています。しかし、よく見ると、考慮する必要のあるすべての場合においてA、停電の終了前であり、停電Dの開始後であるため、あなたの巨大な醜いおよび/またはチェーンはちょうどです

   ('$arrival' <= departure) AND ('$departure' >= arrival)
于 2013-02-28T14:48:08.983 に答える
1

次のようなものを試してください:

 SELECT * from roomreservation where  
   roomtype='$roomtype' and name='$name' and status != 'cancelled' and  
( arrival > '$arrival' and arrival < '$departure' )  
or  
(departure >'$arrival' and  departure <'$departure')  
or
('$arrival'  > arrival and '$arrival' < departure )
or
('$departure' > arrival and '$departure' < departure )
or
('$arrival' = arrival and '$departure' = departure )
or '$arrival' = arrival or '$departure' = departure

注:これはまだ混乱していますが、もっと近いです。

于 2013-02-28T14:19:45.493 に答える