2013-11-14 47 views
0

我的任務是更新我們網站上的價目表。目前,我們必須在管理面板中一次執行這一項。MySQL中多個價格在同一行的更新價格

但是,我們有超過3000個項目,並分級定價爲每個項目(最多5層)

的問題是,在sell_prices表,價格的構成就像這樣:

在一個

10.50:9.50:8.50;7.50;6.50細胞。

我試圖寫一個腳本,將10%

UPDATE inv_items 
SET sell_prices = sell_prices * 1.10 
WHERE id = xxxxxx 

我也曾嘗試更新每個出售價格:

UPDATE inv_items 
SET sell_prices = sell_prices * 1.10; sell_prices = sell_prices * 1.10 
WHERE id = xxxxxx 

但自然收到一個錯誤。

這很好用,但只更新一條記錄,其餘部分留空。

目前,我正在通過PhpMyAdmin進行工作,但是一旦我能夠弄清楚這一點,我會寫一個新的Price Increase腳本。

我備份了數據庫。

回答

0

你需要做這樣的事情:

select sell_prices from inv_items 
(get the values into php) 
(split the values by delimiter ':') 
(update each value) 
(rebuild the line of values with ':' in between) 
update inv_items set sell_prices = (value string you just created) 
+0

謝謝。我將編寫一個測試php頁面,如果一切順利,我將編寫更新腳本以包含在管理面板中。 –

2

如果我理解正確的話,那麼你有5個?價格在一個領域,冒號分開?

這是一個非常奇怪的做法。使用mySQL解析可能會有一種很好的方法,但是從PHP中,您需要將值拉出,將它們分解爲數組,將價格增加應用於每個元素,用冒號將其折回並寫入它回到數據庫。它像所有的外出一樣笨重,但比手工更快。只是。

如果你真的需要重構一下,這只是會繼續咬你。

+0

感謝您的回覆。 我沒有寫這個網站的初始代碼。 我也認爲這是寫的方式是奇怪的。 現在我已經遇到這樣的事情一年了。 –

+0

我感覺你的痛苦弗蘭基,我真的這麼做;我最近剛剛從一場演出中獲得了一個演員,在這個演出中,我被一個不熱情的業餘愛好者在一個爲期8年的時間裏交給了150個網站,因爲一個經理認爲他們只需要「小修改」就可以達到專業標準。這個演出和我見過的不好的編程人員去世時一樣好。 – gedq

0

編輯與mysqli的功能提示:

$qry = 'SELECT id, sell_prices FROM `tablename`'; 
if($result = $mysqli->query($qry)) { 
    while ($row = $result->fetch_assoc()) { 
     $temp = explode(';', $row['sell_prices']); 
     foreach ($temp as &$price) { 
      $price = (float)$price*1.1; 
     } 
     $prices[$row['id']] = implode(';', $temp); 
    } 
    foreach ($prices as $id => $pricesStr) { 
     $stmt = $mysqli->prepare("UPDATE `tablename` SET sell_prices = ? WHERE id = ?"); 
     $stmt->bind_param('si', $pricesStr, $id); 
     $stmt->execute(); 
     $stmt->close(); 
    } 
} 

請注意,我寫了這對飛未經測試,我可能忽略了一些:)

+0

供參考:不推薦棄用的功能。在PHP 5.5中已棄用'mysql_ *'函數。 – UnholyRanger

+0

我還沒有把5.5放在手上,謝謝。下次我會記住它。 –