わかりましたので、次のようなphp配列があります
array('somehash' => 'someotherhash', 'somehash2' => 'someotherhash2');
ここで somehash = producthash および someotherhash = tohash
$db->query('UPDATE sometable SET status = '.self::STATUS_NOT_AVAILABLE.', towhere = '.self::TO_WHERE.', '.
.'tohash = WHEN or IF or ??? and how ?, '.
.'WHERE status = '.self::STATUS_AVAILABLE.' AND '.
.'producthash IN (' . implode(',' , $prodarray) . ')') or $db->err(__FILE__,__LINE__);
したがって、上記のクエリでは、mysqlフィールドtohash
を介してphp配列から値を取得したいproducthash
何かのようなものtohash = IF(producthash IN '.$prodarray.', $prodarray['producthash'] , whatever)
もちろん、上記のIFは機能しません。なぜなら、製品のハッシュ値がないからです$prodarray['producthash']
配列に1000を超える値があり、何千もの更新を実行したくないため、誰もがこれを回避する方法を知っています
このテーブルの一意のキーは3つのフィールドに基づいており、この更新中に3つのフィールド値すべてを持っていないため、この原因ではINSERT INTO ON DUPLICATE KEYは不可能です。