私は次の種類の設定をしています(少し単純化しすぎています):
配列 (php): array('a', 'b', 'c');
表 1:id
値 (1)、(2)、(3)、(その他)。
表 2: id
, idT1
,value
値 (1, 1, 'a'), (2, 1, 'b'), (3, 1, 'c'), (4, 2, 'c'), (5, 77, 'w') (その他).
テーブル 1 から行を選択する必要があります。テーブル 2 には、配列内のすべての値 (この場合は id col = 1 の行) が対応しています。
これを行う方法は次のようになります(可能性のあるタイプミスを無視してください)
<?php
$query = "SELECT * FROM `table1` WHERE `id` IN ";
$subqr = "";
foreach ($arr as $a) {
if (!$subqr)
$subqr = "(SELECT `idT1` FROM `table2` WHERE `value` = '$a')";
else
$subqr .= " AND `id` IN (SELECT `idT1` FROM `table2` WHERE `value` = '$a')";
}
ExecuteQuery($query.$subqr); // Where ExecuteQuery gets query as param.
今私の問題は...私は解決策に完全に満足していないということです...つまり...サブクエリを追加するforeachは最善のアプローチではない可能性があります。配列に 9999 個の要素がある場合... 9999 個のサブクエリは mysql を強制終了します。また、これは単純化しすぎていることに注意してください。
これを行う方法は他にありますか?