質問するログイン新規登録

回答編集履歴

6

レイアウト変更

2016/08/13 23:17

投稿

Panzer_vor
Panzer_vor

スコア1636

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

文面ミス変更

2016/08/13 23:17

投稿

Panzer_vor
Panzer_vor

スコア1636

answer CHANGED
@@ -32,7 +32,7 @@
32
32
  1つ目の着眼点は**setStringなど**で値を設定している箇所で、
33
33
  デバッグ機能を利用し想定した値が変数に設定されているかの確認しましょう。
34
34
 
35
- 2つ目の着眼点はPHP上でのSQLの記載と、
35
+ 2つ目の着眼点はJava上でのSQLの記載と、
36
36
  SQLPlusで実行した**SQLの差分を比較**してみましょう。
37
37
  パラメタを「?」としている箇所以外で大きな差分があれば、
38
38
  そこが実行結果が異なる要因となっている箇所と推測できます。

4

追記

2016/08/13 16:35

投稿

Panzer_vor
Panzer_vor

スコア1636

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

2016/08/13 16:33

投稿

Panzer_vor
Panzer_vor

スコア1636

answer CHANGED
@@ -18,4 +18,4 @@
18
18
  ```
19
19
 
20
20
  ちなみにこの条件により取得されたデータ件数が1以上は、
21
- 重複ありとなります。(isOverLap)
21
+ 重複ありとなります。(**isCheckOverlap**ではfalseを返すことになります)

2

追記

2016/08/13 12:00

投稿

Panzer_vor
Panzer_vor

スコア1636

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

誤字修正

2016/08/13 11:51

投稿

Panzer_vor
Panzer_vor

スコア1636

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) -- 開始日含む