我的数据库"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并在表中更新它。然后我计算折扣并更新表,然后我计算价格(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;
} 以此类推..
我的疑问可能很简单,但我尝试了很多,也找不到一个正确的解决方案。
我能知道我的错误和正确的解决方案吗?
发布于 2012-08-20 00:19:25
编辑!
我编辑多个字段的方式是使用自定义的更新函数。此函数接受“=>”为“new value”的关联数组。下面是函数:
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);
}使用方法如下:theTable(“username”,array("username"=>"whateverTheNewNameIs"),array("userID"=>55));
这会更新userID=55,并使用户名成为新的用户名。您可以只扩展第二个数组来更新更多内容。
我认为你的更新和你的where子句是个问题
我会为你的新成本价做一个变量,
$newSellingPrice = $item[$i]['sellingPrice'] + 50;在您的更新中可以使用$newSellingPrice
然后在你的where中,你有一个拼写错误,你没有使用$来获得项目数组。
如果使用方括号表示法,则需要保留查询字符串
"... WHERE item_no = " . $item[$i] . " ;";发布于 2012-08-20 00:19:38
为了回答您的问题,如果您想更新表中的所有字段,则不需要添加WHERE条件,只需使用:
UPDATE accounts SET SellingPrice = CostPrice + 50并且总共只运行一个查询,而不是每个项目运行一个查询。
然而,,所有依赖于其他列的列真的不需要是单独的列,你最好使用一个只有2列的表,并根据需要计算价格。现在你有很多重复的信息,因为成本价和乘数是你真正需要存储的唯一值。
https://stackoverflow.com/questions/12027982
复制相似问题