2

基本的にタイムスタンプ検索クエリを作成しようとしています。ユーザーが希望する予約の開始時刻と終了時刻を入力すると、検索により、その期間中のその部屋の現在の予約が見つかります。一致が見つかった場合、その部屋はすでに予約されていることがユーザーに通知されます。

私が直面している問題は、このクエリを送信するときです。

SELECT * FROM event WHERE begintime <= '$start' AND endtime >= '$end' AND room = '$room';

レコードがありません。変数は正しい情報を保持しているので、算術演算子の使い方が間違っているのではないかと思います。私は多くのことを調べ、1 つのクエリで両方のタイプの比較が使用されている例を多数見つけましたが、1 つの列に対してのみでした。このように、ある列に対して値を比較し、別の列に対して値をすべて 1 つのクエリで比較する例は見つかりませんでした。

誰が私が間違っているのか分かりますか? どんな助けでも大歓迎です。ありがとう!

編集:タイムスタンプをエポック時間に設定しているため、検索に入れられる開始時間は、開始時間と終了時間の間に収まるように、データベースに既に存在する時間以上になります。検索に投入された時間は、開始時間と終了時間の間に入るデータベースの終了時間以下になるため、終了時間は逆になります。標識を反転すると、データベース内の予約外の時間が見つかります。入力が検証されます。

4

4 に答える 4

0

あなたはそれらを切り替える必要があります、私は推測しますか?

ここにあります:

SELECT * FROM event WHERE begintime >= '$start' AND endtime <= '$end' AND room = '$room'; 

開始日から終了日までの開始時刻が必要です。さらに、開始変数と終了変数が以下に準拠しているかどうかを検証することをお勧めします。

  1. それらは等しい(最悪の場合) または
  2. begintimeはendtimeよりも短いです。

そうしないと、結果を受け取ることが保証されません。

于 2011-12-01T08:24:24.217 に答える
0

私が投稿を理解$start$end、ユーザーからの入力である場合。

その場合、クエリを次のように記述する必要があります。

SELECT * FROM event WHERE begintime >= '$start' AND endtime <= '$end' AND room = '$room';

条件は逆の順序で配置されます。

于 2011-12-01T08:26:57.680 に答える
0

さまざまなシナリオがあることを確認するには:

  • 検索期間中に予約が始まります
  • 検索期間中に予約が終了します
  • 予約は検索期間の前に開始し、検索期間の後に終了します。

3つすべてを検索する必要があります

SELECT * FROM event WHERE ((begintime <= '$start' AND endtime >= '$end') OR (begintime >= '$start' AND endtime <= '$start')  OR (begintime >= '$end' AND endtime <= '$end')) AND room = '$room';
于 2011-12-01T08:30:14.087 に答える
0
SELECT * 
  FROM event 
 WHERE CASE 
          WHEN begintime > '$start' THEN begintime 
          ELSE '$start' 
       END
       <
       CASE 
          WHEN endtime > '$end' THEN '$end'
          ELSE endtime 
       END
       AND room = '$room';
于 2011-12-01T09:17:51.560 に答える