2012-12-27 80 views
0

从这个Array()我想要获取amount_total,运输和合作伙伴的值,并由特定合作伙伴对其进行总计。因此,例如partner=>2665应该有一个amount_total 41.79 + 55.95等请帮助。我不想通过SQL来完成,因为我也需要这些数据。从数组和总计中获得唯一值

Array 
(
    [0] => Array 
    (
     [amount_total] => 41.79 
     [amount_shipping] => 4.99 
     [amount_partner] => 14.8 
     [partner] => 2665 
    ) 
    [1] => Array 
    (
     [amount_total] => 55.95 
     [amount_shipping] => 19.96 
     [amount_partner] => 11 
     [partner] => 2665 
    ) 
    [2] => Array 
    (
     [amount_total] => 51.96 
     [amount_shipping] => 7.98 
     [amount_partner] => 23.98 
     [partner] => 51754 
    ) 
    [3] => Array 
    (
     [amount_total] => 24.55 
     [amount_shipping] => 4.99 
     [amount_partner] => 5.67 
     [partner] => 11513 
    ) 
) 
+0

这是一个数据库结果集? –

+0

so im doing foreach($ result as $ res){ $ partner [$ res ['partner']] = array( 'amount_total'=>? ); } – Yeak

+0

是它是数据库结果 – Yeak

回答

2

您可以使用PHP来实现这一点,但这不是必需的。 数据库可以做到这一点更有效地

我假设你当前的查询看起来是这样的

SELECT 
    `amount_total`, 
    `amount_shipping`, 
    `amount_partner`, 
    `partner` 
FROM 
    `salesLeads` 
WHERE 
    [..] 

MySQL的给你很好的聚合功能,如SUM你可以用GROUP BY

SELECT 
    SUM(`amount_total`) AS `amount_total`, 
    SUM(`amount_shipping`) AS `amount_shipping`, 
    SUM(`amount_partner`) AS `amount_partner`. 
    `partner` 
FROM 
    `salesLeads` 
WHERE 
    [..] 
GROUP BY 
    `partner` 

在使用您以同样的方式访问您的PHP脚本,但它的最终号码已由合作伙伴分组和归类

例如

if ($result = $mysqli->query($query)) { 

    while ($row = $result->fetch_assoc()) { 
     print_r($row); 
    } 

    $result->close(); 
} 

编辑

因为你想要一个PHP的解决方案,而这又是不是查询两次更有效:

$partnerSums = array(); 
while ($row = $result->fetch_assoc()) { 
    if (!array_key_exists($row['partner'], $partnerSums) { 
      $partnerSums[$row['partner']] = $row; 
    } else { 
      $partnerSums[$row['partner']]['amount_total'] += $row['amount_total']; 
      $partnerSums[$row['partner']]['amount_shipping'] += $row['amount_shipping']; 
      $partnerSums[$row['partner']]['amount_partner'] += $row['amount_partner']; 
    } 
} 

print_r($partnerSums); 
+0

没有真正阅读过“不想在SQL中执行它,因为..”,看看[fireeyedboys答案](http://stackoverflow.com/questions/14060560/get-unique-数值和总数/ 14061798#14061914) –

+0

增加了一个PHP解决方案 –

+0

这似乎并不奏效,它并没有给我这个合伙人的总数 – Yeak

0

我想通过这个数组循环和存储的总计在新的数组,与检查in_arraymore here)沿着应该足够了。所有你需要做的是每次通过一个元素你循环,检查它是否已经在新的数组,如果是 - 进行必要的数学运算

+0

所以Im做 的foreach($结果作为$ RES){$ 伙伴[$ RES [ '伙伴']] =阵列( 'amount_total'=> ); } – Yeak

0

我建议是这样的:

$res['totals']=array(); 

foreach($result as $res) 
{ 
    $partner = $result['partner']; 
    $res['totals'][$partner]+=$result['total_amount']; 
} 

这你只需要在一个地方获得你需要的所有数据:合作伙伴数组'$ res'。

希望它可以帮助你。