[英]Change multiple MySQL fields with single query - product code sales
我有一個出售產品的網站,每個產品都有自己的產品代碼。 問題是最近我們將所有產品代碼更改為所有產品。
因為今天以前插入MySQL的所有銷售都使用舊產品代碼,所以當我嘗試獲取報告以查看一個產品已售出多少時,系統會找到0,因為當舊銷售插入舊產品時,它會尋找新產品代碼一。
解:
即使很痛苦,也沒有其他方法可以更新所有已售出並插入MySQL的產品,並以此方式用新的產品代碼更新舊的產品代碼。
我需要這樣更新:
$update = mysqli_query($database, "
update `sales` SET code = 0001 WHERE `code` = '4574645448458'
");
唯一的問題是,它僅使用該產品代碼更新第一個產品,但是我出售的產品中有成千上萬個使用相同產品代碼的產品...
如何以某種方式解決這個問題?
我將要更改的示例:
0001的代碼4574645448458 0002的代碼4574645448459
等等
這是Marc B的建議示例。
使用准備好的語句 ,然后對每對“舊/新”值執行該語句 。
准備好的語句可以重復執行。 每次執行時,將評估綁定變量的當前值並將其發送到服務器。 該語句不會再次解析。 語句模板不會再次傳輸到服務器。
例如:
// 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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.