我的任务是更新我们网站上的价目表。目前,我们必须在管理面板中一次执行此项目。
但是,我们有超过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工作,但是一旦我弄明白,我就会写一个新的价格提升脚本。
我已经备份了数据库。
答案 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();
}
}
请注意我在没有测试的情况下即时编写了这个,我可能会忽略一些事情:)