【发布时间】:2013-01-29 22:36:02
【问题描述】:
我有下表包含以下值:
id name farmid amount cycleid totalprice quantity month year
1 DAP 1 2400 1 24000 10 DECEMBER 2012
2 UREA 1 2500 1 5000 2 DECEMBER 2012
3 SENCOR 1 1200 1 2400 2 DECEMBER 2012
4 DAP 2 2400 1 2400 1 DECEMBER 2012
5 UREA 2 2500 1 2400 1 DECEMBER 2012
6 SENCOR 3 2000 2 4000 2 DECEMBER 2012
7 DAP 1 3000 2 3000 1 JANUARY 2013
8 UREA 2 3000 2 6000 2 JANUARY 2013
9 SENCOR 3 3000 2 6000 2 JANUARY 2013
我在制定正确的 SQL 语句以进行批量更新时遇到问题,例如更新行的月份为 DECEMBER 年份为 2012 并且仅使用农场 ID 1 注意:农场行不能有多个cycleid 在同一个月,例如在 12 月。请帮助为上述问题提出正确的sql语句。这是我在code-igniter中尝试的:
$chemicalarray = array(
1=>array('name'=>$B41,'farmid'=>$farmname_id,'amount'=>$D41,'cycleid'=>$cycleid,'totalprice'=>$E41,'quantity'=>$C41,'year'=>$E4,'month'=>$E5),
2=>array('name'=>$B42,'farmid'=>$farmname_id,'amount'=>$D42,'cycleid'=>$cycleid,'totalprice'=>$E42,'quantity'=>$C42,'year'=>$E4,'month'=>$E5),
3=>array('name'=>$B43,'farmid'=>$farmname_id,'amount'=>$D43,'cycleid'=>$cycleid,'totalprice'=>$E43,'quantity'=>$C43,'year'=>$E4,'month'=>$E5),
4=>array('name'=>$B44,'farmid'=>$farmname_id,'amount'=>$D44,'cycleid'=>$cycleid,'totalprice'=>$E44,'quantity'=>$C44,'year'=>$E4,'month'=>$E5),
5=>array('name'=>$B45,'farmid'=>$farmname_id,'amount'=>$D45,'cycleid'=>$cycleid,'totalprice'=>$E45,'quantity'=>$C45,'year'=>$E4,'month'=>$E5),
);
foreach ($chemicalarray as $key) {
$unitsql = "UPDATE chemical SET name = '{$key['name']}', farmid = '{$key['farmid']}' ,
amount = '{$key['amount']}' , cycleid = '{$key['cycleid']}' ,
totalprice = '{$key['totalprice']}', quantity = '{$key['quantity']}'
WHERE year = '{$key['year']}'
AND month = '{$key['month']}'";
$q = mysql_query($unitsql);
echo $key['name'];
echo $key['amount'];
if($q==true){ }else{ echo mysql_error(); }
}
Output of var_dump is :
array(8) { ["name"]=> string(8) "Round Up" ["farmid"]=> string(1) "1" ["amount"]=> float(1300) ["cycleid"]=> string(1) "1" ["totalprice"]=> float(15600) ["quantity"]=> float(12) ["year"]=> float(2012) ["month"]=> string(8) "DECEMBER" } Done11array(8) { ["name"]=> string(7) "Krismat" ["farmid"]=> string(1) "1" ["amount"]=> float(1500) ["cycleid"]=> string(1) "1" ["totalprice"]=> float(15000) ["quantity"]=> float(10) ["year"]=> float(2012) ["month"]=> string(8) "DECEMBER" } Done11array(8) { ["name"]=> string(3) "DAP" ["farmid"]=> string(1) "1" ["amount"]=> float(2500) ["cycleid"]=> string(1) "1" ["totalprice"]=> float(75000) ["quantity"]=> float(30) ["year"]=> float(2012) ["month"]=> string(8) "DECEMBER" } Done11array(8) { ["name"]=> string(4) "Urea" ["farmid"]=> string(1) "1" ["amount"]=> float(2000) ["cycleid"]=> string(1) "1" ["totalprice"]=> float(50000) ["quantity"]=> float(25) ["year"]=> float(2012) ["month"]=> string(8) "DECEMBER" } Done11array(8) { ["name"]=> string(9) "Dual Gold" ["farmid"]=> string(1) "1" ["amount"]=> float(2500) ["cycleid"]=> string(1) "1" ["totalprice"]=> float(75000) ["quantity"]=> float(30) ["year"]=> float(2012) ["month"]=> string(8) "DECEMBER" }
【问题讨论】:
-
你尝试了什么?你的 SQL 在哪里?
-
这是我在代码点火器中尝试的: foreach ($chemicalarray as $key) {$unitsql = "UPDATE chemical SET name = '{$key['name']}', farmid = '{$key['farmid']}' , 金额 = '{$key['amount']}' , cycleid = '{$key['cycleid']}' , totalprice = '{$key['totalprice' ]}', 数量 = '{$key['quantity']}' WHERE year = '{$key['year']}' AND month = '{$key['month']}'"; $q = mysql_query($unitsql);回声 $key['name'];回声 $key['数量']; if($q==true){ }else{ echo mysql_error(); } }
-
请使用该信息编辑您的原始问题,以便正确显示。您遇到了什么错误或意外行为?
-
我只将数组的第一个值保存在数组的所有行中,而忽略应该更新其他行的其他值
-
Please, don't use
mysql_*functions in new code。它们不再维护and are officially deprecated。看到red box?改为了解prepared statements,并使用PDO 或MySQLi - this article 将帮助您决定哪个。如果你选择 PDO,here is a good tutorial.
标签: php mysql sql codeigniter