-1

これから、、送料、およびパートナーの値を取得し、特定のパートナーごとに合計しArray()たいと思います。amount_totalたとえば、partner=>2665amount_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
    )
)
4

3 に答える 3

2

PHP を使用してこれを実現できますが、これは必須ではありません。データベースはこれをはるかに効率的に行うことができます

現在のクエリは次のようになっていると思います

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

MySQL は、 GROUP BYで使用できるSUMのような優れた集計関数を提供します。

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

編集

2 回クエリを実行するよりも効率的な 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 );
于 2012-12-27T21:54:26.687 に答える
0

in_arrayこの配列をループして、合計を新しい配列に格納し、チェック(詳細はこちら) で十分だと思います。あなたがする必要があるのは、要素をループするたびに、それがすでに新しい配列にあるかどうかを確認し、そうであれば - 必要な数学演算を実行することだけです

于 2012-12-27T20:07:10.043 に答える
0

私は次のようなことを提案します:

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

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

このようにして、必要なすべてのデータを 1 つの場所 (パートナー配列 '$res') で取得します。

お役に立てば幸いです。

于 2012-12-27T20:29:43.520 に答える