-2

わかりましたので、次のような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は不可能です。

4

1 に答える 1

0

サブクエリ?

UPDATE ...
WHERE ... producthash in (SELECT * FROM products)

これは、更新しているのと同じテーブルから選択していない限り機能します - mysql は回避策なしではそれを許可しません。

于 2012-08-13T00:45:16.773 に答える