[英]Can I Update One Cell From Two Other Cell In Same MYSQL Table using PHP
我想多次更新单行。 当我从一个单元格更新它时,更新成功,但是当我从两个单元格更新它时,其中一个更新而另一个则没有。
MYSQL表注册为:
CREATE TABLE `registration` (
`Reg_id` int(11) NOT NULL AUTO_INCREMENT,
`Arrears` int(10) NOT NULL,
`Current_Bill` varchar(20) NOT NULL,
`Current_Surcharge` varchar(20) NOT NULL,
PRIMARY KEY (`Reg_id`),
KEY `Reg_id` (`Reg_id`)
) ENGINE=InnoDB AUTO_INCREMENT=66 DEFAULT CHARSET=latin1;
当我更新Arrears
从Current_Bill
并更新Current_Bill
到0
。 有用。 但是当我更新Arrears
从Current_Bill
和更新Current_Bill
到0
和更新Arrears
从Current_Surcharge
和Current_Surcharge
到0
然后Current_Surcharge
被更新到Arrears
和Current_Surcharge
更新到0
,并且还Current_Bill
更新到0
但Arrears
不能从更新Current_Bill
PHP代码是:
<?php
include("Database/connection.php");
$sql = "SELECT * FROM registration,billing_month WHERE Bill_id=(SELECT MAX(Bill_id) FROM billing_month)";
$result = $link->query($sql);
while($row = $result->fetch_assoc())
{
$currentsurcharge = $row['Current_Surcharge'];
$currentbill = $row['Current_Bill'];
$arrears = $row['Arrears'];
$updatearrearsfromcurrentbill = $arrears + $currentbill;
$updatecurrentbilltozero = 0;
$updatearrearsfromcurrentsurcharge = $arrears + $currentsurcharge;
$updatecurrentsurchargetozero = 0;
if (strtotime(date('Y-m-d')) > strtotime($duedate))
{
// thid query is not working while the other
// Update Arrears From Current Bill when Bill Is Not Pay On Due Date
$sql_update5 = "UPDATE `registration` SET `Arrears`= $updatearrearsfromcurrentbill WHERE `Reg_id` = $regid";
// Update Current Bill To Zero
$sql_update6 = "UPDATE `registration` SET `Current_Bill`= $updatecurrentbilltozero WHERE `Reg_id` = $regid";
// Update Arrears From Current Surcharge when Bill is not pay on due date
$sql_update7 = "UPDATE `registration` SET `Arrears`= $updatearrearsfromcurrentsurcharge WHERE `Reg_id` = $regid";
// Update Current Surcharge to Zero
$sql_update8 = "UPDATE `registration` SET `Current_Surcharge` = $updatecurrentsurchargetozero WHERE `Reg_id` = $regid";
mysqli_query($link, $sql_update5);
mysqli_query($link, $sql_update6);
mysqli_query($link, $sql_update7);
mysqli_query($link, $sql_update8);
}
}
?>
您需要在where子句中指定其他参数以实现所需的功能,因为当前它们where Reg_id=$regid
用户-因此,从本质上讲,您用第二个查询覆盖了arrears
数据。 在这两种情况下,您都在评论中说,如果账单未在到期日之前支付,则查询应更新arrears
-该字段只能包含一个值。
实际上,它的当前编写方式与您的sql相同:-
$sql_effective="update `registration` set
`arrears`='$updatearrearsfromcurrentsurcharge',
`current_bill`='$updatecurrentbilltozero',
`current_surcharge`='$updatecurrentsurchargetozero'
where `reg_id`='$regid';";
您需要阐明在特定条件下要实现的目标的逻辑-我不清楚您的要求是什么。
根据您的进一步评论,这可能就足够了。 (请注意,只有1个更新查询!):
$sql_update = "update `registration` set
`arrears`=".abs( $arrears + $currentbill + $currentsurcharge ).",
`current_bill`=0,
`current_surcharge`=0
where `reg_id`='$regid';";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.