【发布时间】:2019-03-08 20:00:40
【问题描述】:
我正在使用 PHP 5.6 和 7.0.29 执行以下 SQLSRV 查询,当我得到结果时,我似乎无法使用 array_sum 添加(SUM)“grand_total”的总结果,甚至当我尝试循环它时。
$sql = "SELECT inv_trx.trx_date, datepart(day, datediff(day, 0, inv_trx.trx_date)/7 * 7)/7 + 1 AS WEEKNUMBER , DATEPART(WEEK, DATEADD(MM, DATEDIFF(MM,0,'".$datetime."'), 0))+ 1 AS WEEK_OF_MONTH, inv_trx.trx_qty, inv_trx.unit_price, inv_trx.ord_qty, item.prod_cat, inv_trx.slsman_1, SUM(inv_trx.trx_qty * inv_trx.unit_price) AS grand_total
FROM dbo.customer customer, dbo.inv_trx inv_trx, dbo.item item, dbo.ord_hedr ord_hedr
WHERE datepart(day, datediff(day, 0, inv_trx.trx_date)/7 * 7)/7 + 1 = '1' AND customer.cust_no = inv_trx.cust_no AND customer.cust_no = ord_hedr.cust_no AND inv_trx.order_no = ord_hedr.order_no AND inv_trx.item_no = item.item_no AND
inv_trx.manu_no = item.manu_no AND ((ord_hedr.ord_type='O') AND (inv_trx.trx_type='S') AND (ord_hedr.ord_class<>'M' And ord_hedr.ord_class<>'P') AND (customer.exclude_sa=0) OR (ord_hedr.ord_type='C') AND (inv_trx.trx_type='S') AND (ord_hedr.ord_class<>'M' And ord_hedr.ord_class<>'P') AND (customer.exclude_sa=0)) AND YEAR(inv_trx.trx_date) = '2018' AND MONTH(inv_trx.trx_date) = '7' GROUP BY inv_trx.trx_date, DATEPART(WEEK,inv_trx.trx_date), inv_trx.trx_qty, inv_trx.unit_price, inv_trx.ord_qty, item.prod_cat, inv_trx.slsman_1 ";
$params = array();
$result = sqlsrv_query( $conn, $sql );
if( $result === false) {
die( print_r( sqlsrv_errors(), true) );
}
while( $row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC) ) {
?> <tr>
<td><?php echo $row['trx_date']->format('m/d/Y')?></td>
<td><?php echo $row['WEEKNUMBER']?></td>
<td><?php echo $row['trx_qty']?></td>
<td><?php echo $row['unit_price']?></td>
<td><?php echo $row['ord_qty']?></td>
<td><?php echo $row['prod_cat']?></td>
<td><?php echo $row['slsman_1']?></td>
<td><?php echo $row['grand_total']?></td>
</tr>
<?php
$group = array($row['grand_total']);
print_r(array_sum($group));
//echo $row['grand_total']; //result is the same
Array_sum 的结果是一样的,只是回显了 grand_total 本身。
示例:4.8 6 109.4 1.197 17.8 45.5 89 而不是总计 = 184.XX
这是因为我已经使用 SUM 来总计 inv_trx.trx_qty * inv_trx.unit_price 来形成 grand_total?
我怀疑这是我的阵列的问题,但我不确定。任何建议将不胜感激。
查询产生以下内容
Trx Date Week Trx QTY Price Quantity Category Salesman Total
09/02/2018 1 1 4.8 80 MAG Mickey 4.8
09/02/2018 1 3 2 50 BOB Donald 6
09/02/2018 1 4 27.35 4 POW Goose 109.4
我想做的是得到总和,即grand_total。
【问题讨论】:
-
您好,欢迎来到 SO。您的查询中有别名,但它们与表的名称相同,这有点失败。更大的问题是您使用的是 ANSI-89 样式连接。是时候开始使用已经存在超过 25 年的“现代”连接语法了。 sqlblog.org/2009/10/08/bad-habits-to-kick-using-old-style-joins 不要害怕在代码中添加一些空格进行格式化。其他人也许能够破译它。
-
您确定查询正在执行您想要的操作吗?你有一个 OR 卡在一大堆 AND 的中间。这里有太多额外的括号,很难理解。
-
就查询本身而言,我得到了我想要的结果,我只是无法对数组 grand_total 求和。我应该注意,我并不是真正的程序员。我一直在拼凑这些,边走边学
-
我不认为你真的得到了你想要的结果,因为你有一个 OR 卡在中间。目前可能会产生结果,但肯定有问题。
-
如果我将 (customer.exclude_sa=0) OR (ord_hedr.ord_type='C') 更改为“AND”,我会得到 0 个结果。
标签: php sql-server wampserver array-sum