0

DBに保存されたリストイベントがあります。イベントを保存できるかどうかをクエリを使用して検出したい。

3 つのフィールドを持つフォームがあります。

  • アイテム
  • 開始日
  • 終了日

ユーザーが保存をクリックしたとき。システムは、イベントが時間範囲で利用可能かどうかを確認する必要があります。

次に例を示します。

http://sqlfiddle.com/#!2/88b27/1

たとえば、「2013 年 9 月 9 日 15:00:00」から「2013 年 9 月 9 日 17:00:00」に終了するイベントを予約したい場合 (2 時間)。これは、開始時間が 2013 年 9 月 9 日 14:00:00 の前のイベント (id=18) が存在するため実行できません。しかし、クエリの作成方法がわかりません。between を使用してクエリを実行しましたが、成功しませんでした。

4

3 に答える 3

1

次のクエリは、期間に影響する既存の予約があるかどうかを示します。

SELECT  *
FROM reservaciones
WHERE FechaEnd >= '2013-09-09 14:00:00' AND
      FechaStart <= '2013-09-09 18:00:00';

注: <=andは、端点が含まれるかどうかによって、>=実際には<andになる場合があります。>

理由は簡単です。一方が他方の終了前に開始し、他方の開始後に終了する場合、2 つの期間が重複します。

于 2013-09-10T01:01:52.097 に答える
0

これらの 2 つの日付の間にイベントがあるかどうかを DB に問い合わせることで、これを簡単に実現できます。何かのようなもの

SELECT * FROM EVENTS WHERE EVENT_DATE BETWEEN STARTDATE AND ENDDATE

クエリが結果を返す場合、新しいイベントを受け入れることができないことがわかります。

持っているデータベースフィールドなどを指定していないため、これはあいまいです。

于 2013-09-10T00:44:44.550 に答える
0

これを試して

SELECT * FROM 予約
WHERE '2013-09-09 20:00:10' BETWEEN FechaStart と FechaEnd
または '2013-09-09 21:00:00' BETWEEN FechaStart と FechaEnd

列がある場合は、その時間から予約できないことを意味します

説明

送信されたイベントが別のイベントと重複しているかどうかを判断するには、2 つのケースがあります。

  • 最初のケースは、送信されたイベントの開始日時が別のイベントと重なっている場合です。

     ^********************^  <-- another event
                ^*********************^  <-- current event
    
  • 2つ目は、投稿したイベントの終了日時が他のイベントと重なっている場合です。

                  ^********************^  <-- another event
        ^*********************^  <-- current event
    

上の図からわかるように、これら 2 つのイベントは互いに重なり合っています。お互いに重ならないイベントはこんな感じになります

  ^********************^  <-- another event
                          ^*********************^  <-- current event
于 2013-09-10T00:46:43.270 に答える