MySQL中的updatepricing,其中多个价格在同一行

时间:2013-11-14 13:53:56

标签: php mysql

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

但是,我们有超过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工作,但是一旦我弄明白,我就会写一个新的价格提升脚本。

我已经备份了数据库。

3 个答案:

答案 0 :(得分:2)

如果我理解正确,那么你有5个?在一个领域的价格,结肠分开?

这是一种非常奇怪的做法。使用mySQL解析可能有一种很好的方法,但是从PHP开始,你需要将值拉出来,将它们分解为数组,将价格增加应用于每个元素,然后用冒号将其删回并写入它回到数据库。它比所有人都更加笨拙但比手工操作更快。只是。

如果你真的需要重新考虑,那么你可以继续前进;那就是一直咬着你。

答案 1 :(得分: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)

答案 2 :(得分: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();
    }
}

请注意我在没有测试的情况下即时编写了这个,我可能会忽略一些事情:)