回答編集履歴

2

取り消し機能がないので、コメントを修正します。

2021/11/02 11:43

投稿

nicorinpana
nicorinpana

スコア55

test CHANGED
@@ -1,3 +1,3 @@
1
1
  start < endという前提条件で
2
2
 
3
- 終了日時がテーブルのstart未満または開始日時がendよりあとという条件で、レコードが取得できなければ予約可能と考えるが正しいかと思います。
3
+ 終了日時がテーブルのstart未満または開始日時がendよりあとという条件で、レコードが取得できなければ予約可能と考えるが正しいかと思います。

1

申し訳ありません。回答に誤りがありましたので取り消させてください。私の回答では範囲が重複している場合が考慮されていません。

2021/11/02 11:43

投稿

nicorinpana
nicorinpana

スコア55

test CHANGED
@@ -1,29 +1,3 @@
1
- 開始日時がテーブルのstart以上かつ終了日時がend以下で取れる場合、予約不可能考えればいと思います。
1
+ start < endという前提条件で
2
2
 
3
- SQLは以下のようになるかと
4
-
5
- ちなみに質問者さんのSQLでも分かりづらいですが取れると思います。
6
-
7
- ただ示されているデータのスタートに17:00があるため、質問者さんのSQLでは時間が被る扱いになりますね。
8
-
9
- 2行目のデの開始日時が2021/11/05 17:01:00だったら問題ないのでは
3
+ 終了日時がテブルstart未満または開始日時がendよりあとという条件で、レコードが取得できければ予約不可能と考えるが正しかと思います
10
-
11
- 2行目の終了日時と3行目の開始日時もかぶっています。
12
-
13
- カラムの定義として、startとendの重複は認めるのか、その場合パラメータとして渡される値は、
14
-
15
- その値以上なのかより上なのかをしっかり定義した方がいいと思います。
16
-
17
- ```
18
-
19
- SELECT * FROM orders
20
-
21
- WHERE
22
-
23
- start >= '2021-11-05 16:00:00'
24
-
25
- AND
26
-
27
- end <= '2021-11-05 17:00:00'
28
-
29
- ```