6桁~8桁の数列の中に5桁の数列が入っているか調べたい
初めて質問させていただきます。
現在、Excelで書かれている数式を、Python+SQLで代用し、PHPで表示するという
プロジェクトを行っています。(脱Excelを目指しています)
その途中で引っかかった問題なのですが
6~8桁の数列の中に、5桁の数列が含まれるかどうか調べる方法が分かりません。
(1~5桁はできています)
例として、以下のような数列が定義されているとします。
1 | 2 | 3 | 4 | 5 | 6
この数列の中に
5 | 7 | 11 | 9 | 4
が全て含まれている場合、Trueとする。
という計算を行っています。
Excelでの記述の場合は
IF(
AND(
OR(5=1, 7=1, 11=1, 9=1, 4=1),
OR(5=2, 7=2, 11=2, 9=2, 4=2),
OR(5=3, 7=3, 11=3, 9=3, 4=3),
OR(5=4, 7=4, 11=4, 9=4, 4=4),
OR(5=5, 7=5, 11=5, 9=5, 4=5
)
,0,1)
です。これをPython+SQLで記述しようとして
query = "select id from mst_nin_%s where " % (suffix)
if (suffix == 's8'):
for v in range(1, 6):
if (v != 1):
query += " AND "
varname = "num" + str(v);
query += "'%s' in (num1, num2, num3, num4, num5, num6, num7, num8)" % (eval(varname))
elif (suffix == 's7'):
for v in range(1, 6):
if (v != 1):
query += " AND "
varname = "num" + str(v)
query += "'%s' in (num1, num2, num3, num4, num5, num6, num7)" % (eval(varname))
elif (suffix == 's6'):
for v in range(1, 6):
if (v != 1):
query += " AND "
varname = "num" + str(v)
query += "'%s' in (num1, num2, num3, num4, num5, num6)" % (eval(varname))
...
というPythonコードを準備し、SQLを生成しました。以下の通りです。
select id from mst_nin_s6 where
'5' in (num1, num2, num3, num4, num5, num6) AND
'7' in (num1, num2, num3, num4, num5, num6) AND
'11' in (num1, num2, num3, num4, num5, num6) AND
'9' in (num1, num2, num3, num4, num5, num6) AND
'4' in (num1, num2, num3, num4, num5, num6)
その後、PHPで存在するかどうかのSQLを実行しました
SQLは以下の通りです。
select
group_concat(distinct(mb.num1) SEPARATOR ',') as num1,
group_concat(distinct(mb.num2) SEPARATOR ',') as num2,
group_concat(distinct(mb.num3) SEPARATOR ',') as num3,
group_concat(distinct(mb.num4) SEPARATOR ',') as num4,
group_concat(distinct(mb.num5) SEPARATOR ',') as num5,
group_concat(distinct(mb.num6) SEPARATOR ',') as num6
from input_nin_s6 as ib join mst_nin_s6 mb on ib.nin_s6_id REGEXP CONCAT('(^|,)', mb.id, '(,|$)')
group by ib.id
このとき、全く関係ない10が帰ってきています。
なぜ10が帰ってくるのか不明です。わかる方、教えていただけませんでしょうか。
よろしくおねがいします。