2013-11-14 123 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放在手上,谢谢。下次我会记住它。 –