Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP在MySQL中一次更新多行_Php_Mysql - Fatal编程技术网

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

使用PHP在MySQL中一次更新多行,php,mysql,Php,Mysql,我有一个文本文件,其中包含例如公司名称、产品和价格。数据库中大约有200条记录,文本文件中的记录很少。现在我想通过一个sql查询将所有价格更新到db。我试过这个: for($i = $start_row; $i < $stop_row; $i += 3) ... $prices = array($price1, $price2, price3); $pricesfloat = array_map('floatval', $prices); ... $query = "UPDATE test

我有一个文本文件,其中包含例如公司名称、产品和价格。数据库中大约有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());
for($i=$start\u row;$i<$stop\u row;$i+=3)
...
$prices=数组($price1、$price2、price3);
$pricesfloat=array_map('floatval',$prices);
...
$query=“更新测试3设置价格1=$pricesfloat[0],价格2=$pricesfloat[1],价格3=$pricesfloat[2],其中公司='$company'和产品='$product';
mysql_query($query,$connection)或die(mysql_error());

mysql\u infected\u rows()
返回0行。我可以使用insert INTO将所有值插入db,但在这种情况下,我必须更新现有值并在以后添加缺少的值。有人能帮忙吗?:)

插入。。。在重复密钥更新时
,可能适合您的情况:

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

我不确定我能不能让它正常工作,因为数据库没有产品和公司的ID,只有每一行的ID。计划是匹配的行必须有更新,如果没有添加数据,php脚本会询问用户如果没有找到匹配项该怎么办。您可以在(公司、产品)上添加唯一索引以产生重复冲突。或者对联合生成的派生表使用复杂的更新:)我试图向公司添加唯一索引,但收到消息“重复条目错误”。我应该用唱片的ID做些什么吗?当然,它是主键…也许替换sql查询可以帮助您?如果我没记错,
REPLACE
-语句不支持
其中
是的,您可以尝试添加唯一的超级索引(公司+产品),然后使用REPLACE ignore注意,即使更新成功,mysql受影响的行也可能返回0。此时旧值和新值相同。