2017-09-07 5 views
2

私はアイテム、desc、価格を持つテーブルを持っています。 私はcsvとしてエクスポートするとき私は価格の列を合計し、サブ合計のような最後の行に入れたい。 CSVはうまく生成..私は価格の列を合計する必要があります。php export csv私は価格の列を合計したい

header('Content-Type: text/csv; charset=utf-8'); 
    header('Content-Disposition: attachment; filename=' . $type . '-' . date('Y-m-d') . '.csv'); 
    $output = fopen('php://output', 'w'); 


    foreach ($price_list as $car) { 
     $i++; 
     $rows[$i][id] = $car->id; 
     $text = $car->item; 
     $rows[$i][des]=$car->des; 
     $rows[$i][text] = preg_replace('/\s+/S', " ", $text); 
     $rows[$i][price]=$car->price; 
     $rows[$i][stocks]=$car->stocks; 

     $rows[$i][edited_dt] = $car->edited_dt; 


    } 




    foreach ($rows as $row) { 
     fputcsv($output, $row); 
    } 

//クエリ 選択ID、P_TYPE、アイテム、DES、価格、価格の単位、株式、stocks_unit、created_dt、CREATED_BY、price_listからedited_dt のID DESCによって状態= 1
ため

+0

。SELECT ID、P_TYPE、アイテム、デ、価格、価格の単位、株式、stocks_unit、created_dtを:

は、ここで全体のテーブルの上にこのプログラムのロールアップトリックがどのように機能するかを示す簡略デモへのリンクありcreated_by、edited_dt price_listここからstate = 1 id descで注文する –

+0

私はMySQLの中で総価格を計算するためにロールアップを使用する以下のオプションを与えました。 –

答えて

0

あなたに直接任意の集約を行うにはしたくないと仮定すると、その後、あなたの問題への純粋なMySQLのソリューションは、実際にあり

$price_sum = 0; 
foreach ($price_list as $car) { 
     $i++; 
     $rows[$i][id] = $car->id; 
     $text = $car->item; 
     $rows[$i][des]=$car->des; 
     $rows[$i][text] = preg_replace('/\s+/S', " ", $text); 
     $rows[$i][price]=$car->price; 
     $price_sum += $car->price;; //sum price here 
     $rows[$i][stocks]=$car->stocks; 

     $rows[$i][edited_dt] = $car->edited_dt; 


    } 
    $i++; 
     $rows[$i][id] = ""; 
     $rows[$i][des]=""; 
     $rows[$i][text] =""; 
     $rows[$i][price]=$price_sum; //add sum here 
     $rows[$i][stocks]=""; 
     $rows[$i][edited_dt] =""; 




    foreach ($rows as $row) { 
     fputcsv($output, $row); 
    } 
+0

素晴らしい...ありがとうございます。 –

0

ループの前に変数$total = 0;を設定します。ループ内に、$total += $car->price;を追加します。ループの後に最後の行を追加します。

0

合計行が含まれているループのために外に新しい列を追加ループに合計を追加します。 PHPコード。次のクエリを考えてみます。

SELECT 
    id, p_type, item, des, price, price_unit, stocks, stocks_unit, creat‌​ed_dt, 
    created_by, edi‌​ted_dt, 
    SUM(price) AS total_price 
FROM price_list 
WHERE state = 1 
GROUP BY 
    id, p_type, item, des, price, price_unit, stocks, stocks_unit, creat‌​ed_dt, 
    created_by, edi‌​ted_dt 
WITH ROLLUP 
HAVING 
    (p_type IS NOT NULL AND item  IS NOT NULL AND des IS NOT NULL AND 
    price IS NOT NULL AND price_unit IS NOT NULL AND stocks IS NOT NULL AND 
    stocks_unit IS NULL AND created_dt IS NULL AND created_by IS NOT NULL AND 
    edited_dt IS NOT NULL) OR 
    id IS NULL; 

だけでこの結果セットを反復処理し、そしてあなたが最後のレコードを打ったとき、単に価格の合計になりますtotal_price列にアクセス。このレコードのマーカーは、結果セット内の最後のレコードであることに加えて、以外のよりもtotal_pricenullであることです。 、

Demo

関連する問題