1

データベース「accounts」にSQLテーブルがあり、その構造は次のようになっています。

 ItemNo  CostPrice  SellingPrice  Discount(10%)  Price(INR)  
  100       $100      $150            $135         Rs.7425   
  101       $200      $250            $225         Rs.10395  
  102       $150      $200            $180         Rs.7920   
  103       $500      $550            $495         Rs.25245  

ここで、各列は前の列に依存しています。

SellingPrice = CostPrice + 50

Discount = SellingPrice + (0.1 * SellingPrice)

Price(INR) = SellingPrice * ($_Conversion_rate_to_Rs)

SellingPriceを計算し、テーブルで更新する必要があります。次に、割引を計算してテーブルを更新します。次に、Price(INR)を計算して、テーブルを更新します。

次のコードを試していますが、機能していないようです。

$i = 0;
foreach($item_no as $item ){
mysql_query("UPDATE accounts SET SellingPrice = CostPrice + 50 WHERE item_no = '$item[$i]'") or die(mysql_error());
++$i;
}

SellingPriceを更新した後、割引を計算してデータベースを更新する必要があります。

$i = 0;
foreach($item_no as $item ){
mysql_query("UPDATE accounts SET Discount = SellingPrice + (0.1 * SellingPrice) WHERE item_no = '$item[$i]'") or die(mysql_error());
++$i;
} 

等々..

私の疑問は非常に単純かもしれませんが、私は多くのことを試みましたが、正しい解決策を見つけることができませんでした。

私の間違いと正しい解決策を知ることができますか?

4

2 に答える 2

1

編集!

複数のフィールドを編集する方法は、カスタム更新機能を使用することです。この関数は、「field」=>「newvalue」の連想配列を取ります。関数は次のとおりです。

function update($table,$values,$conditions){

    $query = "UPDATE `" . $table . "` SET ";
    foreach($values as $key => $value){
        if($key == "password")
            $query .= "`password` = PASSWORD('" . $mysqli->real_escape_string($value) . "'),";
        else if(is_numeric($value))
            $query .= "`" . $mysqli->real_escape_string($key) . "` = " . $mysqli->real_escape_string($value) . ",";
        else
            $query .= "`" . $mysqli->real_escape_string($key) . "` = '" . sanitize($value) . "',";
    }
    $query = substr($query,0,-1);

    if(!is_string($conditions)){
        $conditionStr = "";
        foreach($conditions as $key => $value){

            if($key == "password")
                $conditionStr .= "`password` = PASSWORD('" . $mysqli->real_escape_string($value) . "') AND ";
            else if(is_numeric($value))
                $conditionStr .= "`" . $mysqli->real_escape_string($key) . "` = " . $mysqli->real_escape_string($value) . " AND ";
            else
                $conditionStr .= "`" . $mysqli->real_escape_string($key) . "` = '" . sanitize($value) . "' AND ";
        }
        $conditionStr .= substr($conditionStr,0,-4);
        $conditions = $conditionStr;
    }

    $query .= " WHERE " . $conditions . " ;";
    $mysqli->query($query);
}

次のように使用します:update( "theTable"、array( "username" => "whateverTheNewNameIs")、array( "userID" => 55));

これにより、userID = 55が更新され、ユーザー名が新しいものになります。2番目の配列を展開するだけで、さらに多くのものを更新できます。

アップデートとwhere句に問題があると思います

私はあなたの新しい原価の変数を作ります、

$newSellingPrice = $item[$i]['sellingPrice'] + 50;

アップデートでは、$newSellingPriceを使用できます

次に、あなたの場所でタイプミスがあり、アイテム配列を取得するために$を使用しませんでした。

角括弧表記を使用している場合は、クエリ文字列を残す必要があります

"... WHERE item_no = " . $item[$i] . " ;";
于 2012-08-19T16:19:25.133 に答える
1

WHERE質問に答えるために、テーブル内のすべてのフィールドを更新する場合は、条件を追加する必要はありません。次を使用するだけです。

UPDATE accounts SET SellingPrice = CostPrice + 50

アイテムごとに1つのクエリではなく、合計で1つのクエリのみを実行します。

ただし、他の列に依存するすべての列は、実際には個別の列である必要はありません。2列しかないテーブルを使用して、必要に応じて価格を計算する方がはるかに優れています。原価と乗数が実際に保存する必要がある唯一の値であるため、これで多くの重複情報があります。

于 2012-08-19T16:19:37.770 に答える