好吧所以我有一个看起来像
的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__);
所以在上面的查询中我希望通过tohash
mysql字段从php数组中获取producthash
值
类似于tohash = IF(producthash IN '.$prodarray.', $prodarray['producthash'] , whatever)
当然以上的IF不会工作因为我没有$prodarray['producthash']
任何人都知道解决这个问题的方法,因为我在数组中有超过1000个值,并且不想运行一千个更新
INSERT INTO ON DUPLICATE KEY在此原因中是不可能的,因为此表唯一键基于3个字段,并且在执行此更新时我没有所有三个字段值。
答案 0 :(得分:0)
子查询?
UPDATE ...
WHERE ... producthash in (SELECT * FROM products)
只要您没有从正在更新的同一个表中进行选择,这将有效 - 如果没有解决方法,mysql不允许这样做。