使用 PHP 在 MySQL 中一次更新多行


Updating multiple rows at once in MySQL with PHP

我有一个文本文件,其中包含例如公司名称,产品和价格。数据库中大约有 200 条记录,文本文件中还有更多。现在我想通过一个sql查询将所有价格更新到db。我试过这个:

for($i = $start_row; $i < $stop_row; $i += 3)
...
$prices = array($price1, $price2, price3);
$pricesfloat = array_map('floatval', $prices);
...
$query = "UPDATE test3 SET price1 = $pricesfloat[0], price2 = $pricesfloat[1], price3 = $pricesfloat[2] WHERE company = '$company' AND product = '$product'";
mysql_query($query, $connection) or die(mysql_error());

mysql_affected_rows()返回 0 行。我可以使用 INSERT INTO 将所有值插入到 db,但在这种情况下,我必须更新现有值并在以后添加缺失值。有人可以帮忙吗?:)

INSERT ... ON DUPLICATE KEY UPDATE http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html,可能适合您的情况:

INSERT INTO table (product_id, price) VALUES (1, 1.323),(2, 3434) ... (200, 2.333) ON DUPLICATE KEY UPDATE price = VALUES(price)

批量更新的另一种方法是:

UPDATE table
INNER JOIN (
    (SELECT 'company1' AS company, 'product1' AS product, 'price1' AS price
    UNION ALL SELECT 'company2', 'product2', 'price2'
    ....
    UNION ALL SELECT 'companyN', 'productN', 'priceN') AS tmp 
) USING (company, product)
SET table.price = tmp.price