Php 无法添加数组值,有什么问题?

Php 无法添加数组值,有什么问题?,php,arrays,Php,Arrays,我正在制作一个电子商务网络应用程序,其中一个功能是佣金,我正在进行这项工作 订单表: CREATE TABLE `orders` ( `OrderId` int(11) NOT NULL AUTO_INCREMENT, `OrderCode` varchar(20) NOT NULL, `CustEmailAdd` varchar(80) NOT NULL, `CustDelAddId` varchar(255) NOT NULL, `ProdCode` varchar(255) NO

我正在制作一个电子商务网络应用程序,其中一个功能是佣金,我正在进行这项工作

订单表:

CREATE TABLE `orders` (
 `OrderId` int(11) NOT NULL AUTO_INCREMENT,
 `OrderCode` varchar(20) NOT NULL,
 `CustEmailAdd` varchar(80) NOT NULL,
 `CustDelAddId` varchar(255) NOT NULL,
 `ProdCode` varchar(255) NOT NULL,
 `Quantity` varchar(100) NOT NULL,
 `PaytMethod` varchar(255) NOT NULL,
 `ShippingCharges` float NOT NULL,
 `TaxedAmount` float NOT NULL,
 `AppliedCredits` int(11) NOT NULL,
 `PayableAmount` varchar(255) NOT NULL,
 `OrderDate` datetime NOT NULL,
 `OrderModified` datetime NOT NULL,
 `OrderStatus` varchar(255) NOT NULL,
 `OrderIPAddress` varchar(20) NOT NULL,
 PRIMARY KEY (`OrderId`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
佣金表:

CREATE TABLE `commission` (
 `CommId` int(11) NOT NULL AUTO_INCREMENT,
 `OrderCode` varchar(20) NOT NULL,
 `ProdCode` varchar(255) NOT NULL,
 `ModCode` varchar(255) NOT NULL,
 `AffiCode` varchar(255) NOT NULL,
 `BenCode` varchar(255) NOT NULL,
 `ModCommAmount` varchar(255) NOT NULL,
 `AffiCommAmount` varchar(255) NOT NULL,
 `BenCommAmount` varchar(255) NOT NULL,
 PRIMARY KEY (`CommId`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
附属公司佣金支付表

CREATE TABLE `affiliate_commission_payable` (
 `ACP_Id` int(11) NOT NULL AUTO_INCREMENT,
 `CommId` int(11) NOT NULL,
 `ACP_PaymentStatus` varchar(255) NOT NULL,
 `ACP_PaymentDate` varchar(255) NOT NULL,
 `ACP_PaymentDetails` text NOT NULL,
 PRIMARY KEY (`ACP_Id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
我有这样一个数组:

// For Order 000001    
    Array
    (
        [0] => ORD-000001
    )
    Array
    (
        [Paid] => 26.25
        [Due] => 42.75
    )

// For Order 000002
    Array
    (
        [0] => ORD-000002
    )
    Array
    (
        [Cancelled] => 33.75
        [Due] => 13.5
    )
// For Order 000003
    Array
    (
        [0] => ORD-000003
    )
    Array
    (
        [Paid] => 13.50
        [Paid] => 14.25
    )
我试图做的是向用户显示订单佣金摘要。表格格式如下:

OrderCode    Paid Comm    Cancelled Comm    Due Comm    View Details

ORD-000001   addAllPaid   addAllCancelled   addAllDue       View

ORD-000002   addAllPaid   addAllCancelled   addAllDue       View

ORD-000003   addAllPaid   addAllCancelled   addAllDue       View
如果数组中没有佣金值,请将其替换为0,否则添加它们并根据订单代码显示。我如何做到这一点

到目前为止我尝试过的代码:->

<?php
$qu = "SELECT
           c.*, o.*, acp.*, .*, a.*
       FROM
           customers c, orders o, affiliate_commission_payable acp, commission com, affiliates a
       WHERE
           a.AffiCode = '".$affiCode."'
               AND
           c.AffiCode = '".$affiCode."'
               AND
           c.CustEmailAdd = o.CustEmailAdd
               AND
           acp.CommId = com.commId
               AND
           com.OrderCode = o.OrderCode
               AND
           com.AffiCode = c.AffiCode";
$validate->Query($qu);
if ($validate->NumRows() >= 1) {
    while ($rows = $validate->FetchAllDatas()) {
        $commId = $rows["CommId"];
        $orderCode = $rows["OrderCode"];
        $orderDate = $rows["OrderDate"];
        $arrCommissionStatus = explode(', ', $rows["ACP_PaymentStatus"]);
        $prdCodes = explode(', ', $rows["ProdCode"] );
        $arrAffiCommAmount = explode(', ', $rows["AffiCommAmount"]);

        $ord = explode(', ', $rows["OrderCode"]);

        $prdCodeAndCommStatus = array_combine($prdCodes, $arrCommissionStatus);
        $arrCommAndStatus = array_combine($arrCommissionStatus, $arrAffiCommAmount);

        $table .= "<tr>";
        $table .= "<td>".$orderCode."</td>";
        $table .= "<td>".$orderDate."</td>";
        $table .= "<td>".count($prdCodes)."</td>";

        foreach ($arrCommAndStatus as $key => $value) {
            if ($value == 'Due') {
                $totDueComm += $key;
            } else {
                $totDueComm = 0;
            }
        }
        foreach ($arrCommAndStatus as $key => $value) {
            if ($value == 'Cancelled') {
                $totCancellComm += $key;
            } else {
                $totCancellComm = 0;
            }
        }
        foreach ($arrCommAndStatus as $key => $value) {
            if ($value == 'Paid') {
                $totPaidComm += $key;
            } else {
                $totPaidComm = 0;
            }
        }

        $table .= "<td>".number_format($totPaidComm, 2)."</td>";
        $table .= "<td>".number_format($totCancellComm, 2)."</td>";
        $table .= "<td>".number_format($totDueComm, 2)."</td>";
        $table .= "<td>".number_format(array_sum($arrAffiCommAmount), 2)."</td>";
        $table .= "<td><a href='//www.example.com/nbs/Affiliates/Commission.php?ord=".$orderCode."&id=".$commId."'>View</a></td>";
        $table .= "</tr>";

    }   
}
但是更新只针对第一个订单,而不是所有订单。我哪里出错了?请帮帮我。谢谢

更新2:

我总算设法把它做完了。。但存在一个问题,即该金额被添加到上一个订单金额中,然后显示该金额。。例如,假设我的订单1中有300卢比,订单2中有200卢比。。因此,对于订单1,它将显示300卢比,对于订单2,显示的金额为500卢比。我希望它只显示200卢比,而不是500卢比。我如何解决这个问题?请帮帮我。。再次感谢

以下是我迄今为止使用的代码:

$sta=数组“到期”、“已取消”、“已支付”; $qu=从客户c、订单o、附属公司佣金支付acp、佣金com、附属公司a中选择c.*、o.*、acp.*、com.*、a.*,其中a.AffiCode='.$AffiCode.'和c.AffiCode='.$AffiCode.'和c.CustEmailAdd=o.CustEmailAdd和acp.CommId=com.CommId和com.OrderCode=o.OrderCode和com.AffiCode=c.AffiCode按o.OrderCode分组; $validate->查询$qu; 如果$validate->NumRows>=1{ 而$rows=$validate->FETCHTALLDATA{ $commId=$rows[commId]; $orderCode=$rows[orderCode]; $orderDate=$rows[orderDate]; $arrCommissionStatus=explode',',$rows[ACP_PaymentStatus]; $prdCodes=分解',',$rows[ProdCode]; $arrAffiCommAmount=分解',',$rows[AffiCommAmount]; $prdCodeAndCommStatus=数组\组合$prdCodes,$arrCommissionStatus; $arrCommAndStatus=array\u组合$arrafficomamount、$arrCommissionStatus; $table.=; $table.=.$orderCode。; $table.=.$orderDate。; $table.=.count$prdCodes。; foreach$行作为$key=>$value{ 如果$key==AMOUNT{ $comAmt=分解',',$rows[AffiCommAmount]; } 如果$key==ACP\U付款状态{ $coStat=explode',',$rows[ACP_PaymentStatus]; } } $ts=数组\组合$comAmt,$coStat; foreach$ts作为$k=>v{ 如果在数组$v中,$sta&&$v=='Due'{ $totDueComm+=$k; $TotalDueComm=$totDueComm; } } $table.=.number\U格式$totPaidComm,2。; $table.=.number\U格式$TOTCANCELCOMM,2。; $table.=.number\U格式$totDueComm,2。; $table.=.number\u formatarray\u sum$ArrafficomAmount,2。; $table.=; $table.=; } }
?>基于聊天,以下是解决方案:

我不确定是否了解数据库结构中的所有字段,但是,如您所说,如果希望对数据库中每个订单的佣金进行合计,下面是一个如何进行此操作的示例:

select 
    o.code, sum(c.amount) as total
from orders o
inner join com c on c.orderId = o.id
group by o.code
关键是,在PHP中这样做是无用的,因为MySQL也可以处理它,而无需任何进一步的处理,因此如果我将结构简化如下:

mysql> select * from orders;
+----+------------+
| id | code       |
+----+------------+
|  1 | ORDER-0001 |
|  2 | ORDER-0002 |
+----+------------+

mysql> select * from com;
+----+--------+---------+-----------+
| id | amount | orderId | status    |
+----+--------+---------+-----------+
|  1 |     15 |       1 | DUE       |
|  2 |     12 |       1 | DUE       |
|  3 |      2 |       2 | CANCELLED |
|  4 |     23 |       2 | PAID      |
|  5 |      3 |       1 | CANCELLED |
|  6 |      5 |       1 | PAID      |
|  7 |     12 |       2 | CANCELLED |
+----+--------+---------+-----------+


mysql> select
    -> o.code, c.status, sum(c.amount) as total
    -> from orders o
    -> inner join com c on c.orderId = o.id
    -> group by c.status, o.code
    -> order by o.code, c.status, c.amount;
+------------+-----------+-------+
| code       | status    | total |
+------------+-----------+-------+
| ORDER-0001 | CANCELLED |     3 |
| ORDER-0001 | DUE       |    27 |
| ORDER-0001 | PAID      |     5 |
| ORDER-0002 | CANCELLED |    14 |
| ORDER-0002 | PAID      |    23 |
+------------+-----------+-------+
总的来说,只需将以下各项应用于您的结果:

$ordersTotalCommissions = [];

// fetch your data
foreach ($result as $line) {

    // initialize the 'order' group by putting 0 as a commission
    if (!isset($ordersTotalCommissions[$line['code']])) {
        $ordersTotalCommissions[$line['code']] = 0;
    }

    // sum each commission
    $ordersTotalCommissions[$line['code']] += $line['total'];
}

print_r($ordersTotalCommissions);

告诉我这对你是否有帮助

如果我很好地理解了你的问题,你愿意将每个订单的所有佣金加起来,并将总额显示在html表格中,对吗?如果是,你能发布你的数据库结构吗?是的。。你是对的。。但是总数应该是有序的1.对不起,我没有英文措辞,但是有序的意思是有序相关的?按订单分组的佣金?我仍然可以使用数据库拱门:现在请检查问题..3上的2张图片未加载,请复制/粘贴一个显示创建表架构。有关表的表是。。它确实帮了我的忙。。但正如我所说的,我想根据已付、到期和取消的情况来划分。。并将其添加并显示。。添加这些,并再次显示为订单上的佣金总额。你所做的是全部佣金。。我要分岔。。还我感谢你的帮助。。谢谢你,我知道,先生。。但我已经将金额存储为逗号分隔,然后我将其分解并尝试添加。。你能帮我吗?
$ordersTotalCommissions = [];

// fetch your data
foreach ($result as $line) {

    // initialize the 'order' group by putting 0 as a commission
    if (!isset($ordersTotalCommissions[$line['code']])) {
        $ordersTotalCommissions[$line['code']] = 0;
    }

    // sum each commission
    $ordersTotalCommissions[$line['code']] += $line['total'];
}

print_r($ordersTotalCommissions);