回答編集履歴
6
レイアウト変更
answer
CHANGED
|
@@ -62,6 +62,7 @@
|
|
|
62
62
|
A1 A2
|
|
63
63
|
A'|-----|
|
|
64
64
|
A'1 A'2
|
|
65
|
+
|
|
65
66
|
③A1、A2はA'1、A'2を含んでいる
|
|
66
67
|
A |---------------|
|
|
67
68
|
A1 A2
|
5
文面ミス変更
answer
CHANGED
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
1つ目の着眼点は**setStringなど**で値を設定している箇所で、
|
|
33
33
|
デバッグ機能を利用し想定した値が変数に設定されているかの確認しましょう。
|
|
34
34
|
|
|
35
|
-
2つ目の着眼点は
|
|
35
|
+
2つ目の着眼点はJava上でのSQLの記載と、
|
|
36
36
|
SQLPlusで実行した**SQLの差分を比較**してみましょう。
|
|
37
37
|
パラメタを「?」としている箇所以外で大きな差分があれば、
|
|
38
38
|
そこが実行結果が異なる要因となっている箇所と推測できます。
|
4
追記
answer
CHANGED
|
@@ -18,4 +18,53 @@
|
|
|
18
18
|
```
|
|
19
19
|
|
|
20
20
|
ちなみにこの条件により取得されたデータ件数が1以上は、
|
|
21
|
-
重複ありとなります。(**isCheckOverlap**ではfalseを返すことになります)
|
|
21
|
+
重複ありとなります。(**isCheckOverlap**ではfalseを返すことになります)
|
|
22
|
+
|
|
23
|
+
###追記
|
|
24
|
+
SQLPlusで想定通り動作するけど、
|
|
25
|
+
PHPで想定通りとならないケースというのは、
|
|
26
|
+
|
|
27
|
+
0. バインドパラメタ(?に設定する値)が想定と異なる値を設定している
|
|
28
|
+
0. SQLの記述方法に差異がある
|
|
29
|
+
|
|
30
|
+
上記のどちらかとなるので、その観点でプログラムを確認してみて下さい。
|
|
31
|
+
|
|
32
|
+
1つ目の着眼点は**setStringなど**で値を設定している箇所で、
|
|
33
|
+
デバッグ機能を利用し想定した値が変数に設定されているかの確認しましょう。
|
|
34
|
+
|
|
35
|
+
2つ目の着眼点はPHP上でのSQLの記載と、
|
|
36
|
+
SQLPlusで実行した**SQLの差分を比較**してみましょう。
|
|
37
|
+
パラメタを「?」としている箇所以外で大きな差分があれば、
|
|
38
|
+
そこが実行結果が異なる要因となっている箇所と推測できます。
|
|
39
|
+
|
|
40
|
+
また重複条件の判定について文面だけだとわかり辛いので、
|
|
41
|
+
追加でアドバイスをば。
|
|
42
|
+
|
|
43
|
+
こちらは質問者さんなりに重複条件を考えていらっしゃると思いますが、
|
|
44
|
+
どうしてもプログラミングのみ(頭内で考えるだけ)でわからない場合は、
|
|
45
|
+
一度EXCELや紙などにどういったケースが重複となるかを書き出すと整理しやすいです。
|
|
46
|
+
|
|
47
|
+
例えば以下のように書き出すと、
|
|
48
|
+
どのように条件を付ける必要があるか見えてきませんか。
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
A.今回登録予定の予約
|
|
52
|
+
A'.登録済の予約
|
|
53
|
+
|
|
54
|
+
①A1(開始日)はA'1とA'2に含まれる
|
|
55
|
+
A |----------|
|
|
56
|
+
A1 A2
|
|
57
|
+
A'|-----|
|
|
58
|
+
A'1 A'2
|
|
59
|
+
|
|
60
|
+
②A2(終了日)はA'1とA'2に含まれる
|
|
61
|
+
A |----------|
|
|
62
|
+
A1 A2
|
|
63
|
+
A'|-----|
|
|
64
|
+
A'1 A'2
|
|
65
|
+
③A1、A2はA'1、A'2を含んでいる
|
|
66
|
+
A |---------------|
|
|
67
|
+
A1 A2
|
|
68
|
+
A'|-----|
|
|
69
|
+
A'1 A'2
|
|
70
|
+
```
|
3
追記2
answer
CHANGED
|
@@ -18,4 +18,4 @@
|
|
|
18
18
|
```
|
|
19
19
|
|
|
20
20
|
ちなみにこの条件により取得されたデータ件数が1以上は、
|
|
21
|
-
重複ありとなります。(
|
|
21
|
+
重複ありとなります。(**isCheckOverlap**ではfalseを返すことになります)
|
2
追記
answer
CHANGED
|
@@ -15,4 +15,7 @@
|
|
|
15
15
|
(fromYMD BETWEEN STARTDAY AND ENDDAY) -- 開始日含む
|
|
16
16
|
OR (toYMD BETWEEN STARTDAY AND ENDDAY) -- 終了日含む
|
|
17
17
|
OR (STARTDAY > fromYMD AND ENDDAY < toYMD) -- 別データの開始・終了日を含む
|
|
18
|
-
```
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
ちなみにこの条件により取得されたデータ件数が1以上は、
|
|
21
|
+
重複ありとなります。(isOverLap)
|
1
誤字修正
answer
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
質問者さんのおっしゃる重複の定義が、
|
|
1
|
-
|
|
2
|
+
予約したい期間内に別途予約された日付期間が含まれている状態を指すのでしたら、
|
|
2
|
-
以下の
|
|
3
|
+
以下の考え方でいけるかと思われます。
|
|
3
4
|
|
|
4
5
|
別解もあるのですが、
|
|
5
6
|
期間・範囲の重複を判断する場合の一番単純な考え方は**以下の3条件のいずれかを満たすこと**を確認します。
|
|
@@ -8,7 +9,7 @@
|
|
|
8
9
|
0. 登録したいデータの**終了点を含むデータ**が他に登録されている場合は重複
|
|
9
10
|
0. 登録したいデータの**開始点と終了点が他に登録されているデータの開始・終了点を含む**場合は重複
|
|
10
11
|
|
|
11
|
-
これをSQLで正直に表すと下記
|
|
12
|
+
これをSQLで正直に表すと下記イメージになります。
|
|
12
13
|
|
|
13
14
|
```SQL
|
|
14
15
|
(fromYMD BETWEEN STARTDAY AND ENDDAY) -- 開始日含む
|