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

質問編集履歴

7

コードを一部修正

2017/01/15 09:27

投稿

atLast
atLast

スコア14

title CHANGED
File without changes
body CHANGED
@@ -81,6 +81,7 @@
81
81
  # nin s6
82
82
  # num1からnum5は、チェック元テーブルの中から取得した物(数列B)
83
83
  nin6id = get_nin_id('s6', num1, num2, num3, num4, num5)
84
+ insert(...)
84
85
  ```
85
86
 
86
87
  SQLにすると以下になります。

6

質問内容の調整、typoの修正

2017/01/15 09:27

投稿

atLast
atLast

スコア14

title CHANGED
File without changes
body CHANGED
@@ -4,14 +4,19 @@
4
4
 
5
5
  そこで質問なのですが、以下のような数列があるとします。
6
6
 
7
- 数列A
7
+ 数列A(mst_nin_s6の中身(抜粋))
8
8
  1 | 2 | 3 | 4 | 5 | 6
9
+ 1 | 2 | 3 | 4 | 5 | 7
10
+ ...
11
+ 6 | 7 | 8 | 9 | 10 | 11
12
+ 数値は最大11までで、全てのパターンが網羅されているものとします。
9
13
 
10
14
  上記数列に対して、以下の数列が存在するかを確認したいです。
11
15
 
12
- 数列B
16
+ 数列B(チェック元となるテーブルの中身)
13
17
  5 | 7 | 11 | 9 | 4
14
18
 
19
+
15
20
  excelでの計算式は以下の通りです。
16
21
  ```EXCEL
17
22
  IF(
@@ -20,18 +25,21 @@
20
25
  OR(5=2, 7=2, 11=2, 9=2, 4=2),
21
26
  OR(5=3, 7=3, 11=3, 9=3, 4=3),
22
27
  OR(5=4, 7=4, 11=4, 9=4, 4=4),
23
- OR(5=5, 7=5, 11=5, 9=5, 4=5
28
+ OR(5=5, 7=5, 11=5, 9=5, 4=5)
24
29
  )
25
30
  ,0,1)
26
31
  ```
27
- 数列Bを1ずつに分解して、数列Aに含まれるかを確認している状態です
32
+ 数列Bを1ずつに分解して、数列Aに含まれるかを確認している計算式です。
28
33
 
29
34
 
30
- 上記Excelの計算式を、Pythonにて実装しようとしています。
35
+ 上記Excelの計算式を、PythonとPHPにて実装しようとしています。
31
36
 
32
- まず、以下のSQLを実行し、含まれるかどうかの判定をしています。
37
+ ---
33
38
 
39
+ まず、以下のPythonを実行し、含まれるかどうかの判定をしています。
40
+
34
41
  ```Python
42
+ def get_nin_id(suffix, num1, num2, num3, num4, num5):
35
43
  query = "select id from mst_nin_%s where " % (suffix)
36
44
  if (suffix == 's8'):
37
45
  for v in range(1, 6):
@@ -53,6 +61,26 @@
53
61
  varname = "num" + str(v)
54
62
  query += "'%s' in (num1, num2, num3, num4, num5, num6)" % (eval(varname))
55
63
  ...
64
+
65
+ cur = con.cursor()
66
+ cur.execute(query)
67
+ rows = cur.fetchall()
68
+ if (rows is None):
69
+ return 0
70
+ else:
71
+ ids = ''
72
+ for row in rows:
73
+ if ids == '':
74
+ ids = str(row['id'])
75
+ else:
76
+ ids += ',' + str(row['id'])
77
+
78
+ return ids
79
+ ...
80
+
81
+ # nin s6
82
+ # num1からnum5は、チェック元テーブルの中から取得した物(数列B)
83
+ nin6id = get_nin_id('s6', num1, num2, num3, num4, num5)
56
84
  ```
57
85
 
58
86
  SQLにすると以下になります。
@@ -67,14 +95,17 @@
67
95
  ```
68
96
 
69
97
  マスタテーブル構造は以下の通です。(mst_nin_s6)
70
-
98
+ 中身は、数列Aのものです。
71
99
  ![mst_nin_s6](fd7c195f2bbcbf0e82e27647c1ace3a2.png)
72
100
 
73
101
  チェック結果を入れるテーブル構造は以下の通りです。(input_nin_s6)
74
- 中のデータは、mst_nin_s6のid値です。
102
+ 中のデータは、mst_nin_s6のid値(カンマ区切り)です。
75
103
 
76
104
  ![input_nin_s6](8af1be41a7ed64eb9308745f6294f5c8.png)
77
105
 
106
+ ---
107
+ -------------- ここから、PHPでの処理 --------------
108
+
78
109
  存在するかを確認するクエリは以下の通です。
79
110
 
80
111
  ```SQL
@@ -112,6 +143,6 @@
112
143
 
113
144
  ---- 2017/01/15 16:50追記 ----
114
145
  全体の流れをざっくりまとめると
115
- Pythonでチェック元となるテーブルから値を取得して、mst_nin_s6とぶつけ、input_nin_s6に結果を入れる
146
+ Pythonでチェック元となるテーブルから値を取得して、mst_nin_s6(数列B)とぶつけ、input_nin_s6に結果を入れる
116
147
  その後、PHPで、input_nin_s6をベースとしてmst_nin_s6とjoinして、結果を取得する
117
148
  です。

5

typoの修正

2017/01/15 09:05

投稿

atLast
atLast

スコア14

title CHANGED
File without changes
body CHANGED
@@ -112,6 +112,6 @@
112
112
 
113
113
  ---- 2017/01/15 16:50追記 ----
114
114
  全体の流れをざっくりまとめると
115
- Puthonでチェック元となるテーブルから値を取得して、mst_nin_s6とぶつけ、input_nin_s6に結果を入れる
115
+ Pythonでチェック元となるテーブルから値を取得して、mst_nin_s6とぶつけ、input_nin_s6に結果を入れる
116
116
  その後、PHPで、input_nin_s6をベースとしてmst_nin_s6とjoinして、結果を取得する
117
117
  です。

4

処理の流れを追記

2017/01/15 08:06

投稿

atLast
atLast

スコア14

title CHANGED
File without changes
body CHANGED
@@ -106,6 +106,12 @@
106
106
 
107
107
  よろしくおねがいします!
108
108
 
109
- ---- 16:40編集 -----
109
+ ---- 2017/01/15 16:40編集 ----
110
110
  チェック元となるテーブルは、諸事情により公開することができません。申し訳ありません。
111
- 中のデータ構造は、最初の方で定義している、数列Bとなります。
111
+ 中のデータ構造は、最初の方で定義している、数列Bとなります。
112
+
113
+ ---- 2017/01/15 16:50追記 ----
114
+ 全体の流れをざっくりまとめると
115
+ Puthonでチェック元となるテーブルから値を取得して、mst_nin_s6とぶつけ、input_nin_s6に結果を入れる
116
+ その後、PHPで、input_nin_s6をベースとしてmst_nin_s6とjoinして、結果を取得する
117
+ です。

3

質問への回答追記

2017/01/15 07:54

投稿

atLast
atLast

スコア14

title CHANGED
File without changes
body CHANGED
@@ -66,10 +66,15 @@
66
66
 
67
67
  ```
68
68
 
69
- チェック元となるテーブル構造は以下の通です。
69
+ マスタテーブル構造は以下の通です。(mst_nin_s6)
70
70
 
71
- ![イメージ説明](fd7c195f2bbcbf0e82e27647c1ace3a2.png)
71
+ ![mst_nin_s6](fd7c195f2bbcbf0e82e27647c1ace3a2.png)
72
72
 
73
+ チェック結果を入れるテーブル構造は以下の通りです。(input_nin_s6)
74
+ 中のデータは、mst_nin_s6のid値です。
75
+
76
+ ![input_nin_s6](8af1be41a7ed64eb9308745f6294f5c8.png)
77
+
73
78
  存在するかを確認するクエリは以下の通です。
74
79
 
75
80
  ```SQL
@@ -99,4 +104,8 @@
99
104
 
100
105
  足りない部分があれば、言って下さい。問題の無い範囲で追記します。
101
106
 
102
- よろしくおねがいします!
107
+ よろしくおねがいします!
108
+
109
+ ---- 16:40編集 -----
110
+ チェック元となるテーブルは、諸事情により公開することができません。申し訳ありません。
111
+ 中のデータ構造は、最初の方で定義している、数列Bとなります。

2

修正依頼に従って一部追記

2017/01/15 07:43

投稿

atLast
atLast

スコア14

title CHANGED
File without changes
body CHANGED
@@ -5,12 +5,12 @@
5
5
  そこで質問なのですが、以下のような数列があるとします。
6
6
 
7
7
  数列A
8
- 1|2|3|4|5
8
+ 1 | 2 | 3 | 4 | 5 | 6
9
9
 
10
10
  上記数列に対して、以下の数列が存在するかを確認したいです。
11
11
 
12
12
  数列B
13
- 5|7|11|9|4
13
+ 5 | 7 | 11 | 9 | 4
14
14
 
15
15
  excelでの計算式は以下の通りです。
16
16
  ```EXCEL
@@ -66,7 +66,7 @@
66
66
 
67
67
  ```
68
68
 
69
- テーブル構造は以下の通です。
69
+ チェック元となるテーブル構造は以下の通です。
70
70
 
71
71
  ![イメージ説明](fd7c195f2bbcbf0e82e27647c1ace3a2.png)
72
72
 
@@ -91,6 +91,10 @@
91
91
  SQLの戻り値に入ってしまっています。
92
92
  このため、Excelでの判断結果と違う物になっている状態です。
93
93
 
94
+ 実際にほしいデータは
95
+ 2,3,4,1 | 4,5 | 5,6,7 | 7,8,9 | <empty> | 11
96
+ です。
97
+
94
98
  なぜこのようなことが起こるのでしょうか。
95
99
 
96
100
  足りない部分があれば、言って下さい。問題の無い範囲で追記します。

1

書式の改善、一部ミスの修正

2017/01/15 03:31

投稿

atLast
atLast

スコア14

title CHANGED
File without changes
body CHANGED
@@ -5,7 +5,7 @@
5
5
  そこで質問なのですが、以下のような数列があるとします。
6
6
 
7
7
  数列A
8
- 1|2|3|4|5!
8
+ 1|2|3|4|5
9
9
 
10
10
  上記数列に対して、以下の数列が存在するかを確認したいです。
11
11
 
@@ -16,11 +16,11 @@
16
16
  ```EXCEL
17
17
  IF(
18
18
  AND(
19
- OR(5=1,7=1,11=1,9=1,4=1),
19
+ OR(5=1, 7=1, 11=1, 9=1, 4=1),
20
- OR(5=2,7=2,11=2,9=2,4=2),
20
+ OR(5=2, 7=2, 11=2, 9=2, 4=2),
21
- OR(5=3,7=3,11=3,9=3,4=3),
21
+ OR(5=3, 7=3, 11=3, 9=3, 4=3),
22
- OR(5=4,7=4,11=4,9=4,4=4),
22
+ OR(5=4, 7=4, 11=4, 9=4, 4=4),
23
- OR(5=5,7=5,11=5,9=5,4=5
23
+ OR(5=5, 7=5, 11=5, 9=5, 4=5
24
24
  )
25
25
  ,0,1)
26
26
  ```