繁体   English   中英

我可以使用PHP从同一MYSQL表中的其他两个单元更新一个单元

[英]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;

当我更新ArrearsCurrent_Bill并更新Current_Bill0 有用。 但是当我更新ArrearsCurrent_Bill和更新Current_Bill0和更新ArrearsCurrent_SurchargeCurrent_Surcharge0然后Current_Surcharge被更新到ArrearsCurrent_Surcharge更新到0 ,并且还Current_Bill更新到0Arrears不能从更新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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM