0

我的任务是更新我们网站上的价目表。目前,我们必须在管理面板中一次完成一项。

但是,我们有超过 3000 种商品,并且每个商品都有分层定价(最多 5 层)

问题是,在 sell_prices 表中,价格的结构如下:

10.50:9.50:8.50;7.50;6.50在一个单元格中。

我正在尝试编写一个脚本,将每个 sell_price 更新 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 工作,但一旦我弄清楚这一点,我将编写一个新的价格上涨脚本。

我已经备份了数据库。

4

3 回答 3

1

如果我理解正确,那么您有 5 个?一个字段的价格,冒号分隔?

这是一种非常奇怪的做法。使用 mySQL 解析可能有一种不错的方法,但是从 PHP 中,您需要将值提取出来,将它们分解为一个数组,将价格上涨应用于每个元素,用冒号将其内爆并写入它返回到数据库。它和所有的get-out一样笨重,但比手工操作要快。只是。

如果可以的话,继续前进,你真的需要考虑重构它;那只会继续咬你。

于 2013-11-14T14:01:07.407 回答
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();
    }
}

请注意,我在没有测试的情况下就写了这个,我可能忽略了一些东西:)

于 2013-11-14T14:19:18.873 回答
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)
于 2013-11-14T13:58:30.730 回答