私のスクリプトは要件を満たしていますが、この理由で数千のクエリを実行するため、50〜65秒かかります。私は代替の、よりエレガントで迅速な解決策を探しています。
SELECT GROUP_CONCAT(DISTINCT BatchNo SEPARATOR ', ') AS picklists, web_company_name
FROM PickBatch
LEFT JOIN customer_master ON customer_master.VC_CUSTOMER_CODE = PickBatch.Customer
GROUP BY Customer
これにより、4334、3443、3341、4543などの列の選択リストが返されます
その後、別の列と1つずつ比較する必要があります
while( $row=mysql_fetch_array($res) )
{
$picklists = explode(', ', $row['picklists']);
$pickString = '';
foreach($picklists as $batch)
{
//invoiced
$sql2 = "SELECT invoice_no FROM invoice_web_order WHERE FIND_IN_SET('$batch', frombatch) LIMIT 1";
$res2 = mysql_query($sql2) or die(mysql_error());
if ( mysql_num_rows($res2) > 0 )
{
continue;
}
$pickString .= "$batch, ";
}
echo $pickString;
}
したがって、たとえば、4334、3443、3341、4543を、たとえば「frombatch」の3892、4890、3341、2389と比較すると、3343は除外されます。
同じことをする他の方法はありますか?4334、3443、4543だけが返されるように?