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);