1

我的数据库“帐户”中有一个 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 并在表中更新它。然后我计算折扣并更新表格然后我计算价格(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

编辑!

我编辑多个字段的方式是使用自定义更新功能。该函数采用“字段”=>“新值”的关联数组。这是功能:

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 并使用户名变得新。您可以扩展第二个数组以更新更多内容。

我认为您的更新和 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

并且总共只运行一个查询,而不是每个项目一个查询。

但是,依赖于其他列的所有列实际上不需要是单独的列,使用只有 2 列的表并根据需要计算价格会好得多。现在您有很多重复的信息,因为成本价格和乘数是您真正需要存储的唯一值。

于 2012-08-19T16:19:37.770 回答