我有一个网站,其中包含我销售的产品,每个产品都有自己的产品代码。问题是,最近我们将所有产品代码更改为所有产品。
因为在今天之前插入MySQL的所有销售都使用了旧的产品代码,当我尝试获取报告以查看已售出的产品中有多少时系统找到0,因为它在插入较旧的销售时查找新的产品代码与旧的。
解决方案:
即使它很痛苦,除了更新所有销售和插入MySQL的产品之外别无他法,用这种方式更新旧产品代码,这样就可以正常工作。
我需要像这样更新:
$update = mysqli_query($database, "
update `sales` SET code = 0001 WHERE `code` = '4574645448458'
");
唯一的问题是它只更新了第一个带有此产品代码的产品,但我购买的产品与相同的产品代码一起销售......
如何以批量的方式解决这个问题?
我将改变的例子:
代码4574645448458 for 0001 代码4574645448459 for 0002
等等
答案 0 :(得分:0)
以下是Marc B.的建议示例 使用prepared statement和execute每对"旧/新"值。
准备好的陈述可以重复执行。每次执行时,都会评估绑定变量的当前值并将其发送到服务器。该语句不会再次解析。语句模板不会再次传输到服务器。
例如:
// define an array with all of the code changes as "key/value" pairs
$changes=array(
'4574645448458' => '0001',
'4574645448459' => '0002',
....
);
// define the query string with placeholders
$sql="UPDATE `sales` SET `code`=:new_code WHERE `code`=:old_code;";
// prepare the statement and set up variables to be bound upon execution
$q=$database->prepare($sql);
$q->bind_param(':new_code',$new_code);
$q->bind_param(':old_code',$old_code);
// iterate through "changes", defining the "old" and "new" values for each code change
// execute the prepared statement with each pair of values
foreach ($changes as $old_code => $new_code) {
$q->execute();
}