0

私は、当社のウェブサイトの価格表を更新する任務を負っています。現在、管理パネル内で一度に 1 つの項目を実行する必要があります。

ただし、3000 を超えるアイテムがあり、アイテムごとに段階的な価格設定 (最大 5 段階) があります。

問題は、sell_prices テーブルで、価格が次のように構成されていることです。

10.50:9.50:8.50;7.50;6.501つのセルで。

各 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

しかし、当然エラーを受け取りました。

これはうまく機能しますが、1 つのレコードのみを更新し、残りは空白のままにします。

現在、私は PhpMyAdmin を使って作業していますが、これを理解できたら新しい値上げスクリプトを書きます。

データベースをバックアップしました。

4

3 に答える 3

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 に答える
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 に答える