【问题标题】:php export csv i want to sum price columnphp export csv 我想对价格列求和
【发布时间】:2017-09-07 13:00:39
【问题描述】:

我有一个包含项目、描述、价格的表格。 当我导出为 csv 时,我想对价格列求和并放入最后一行,如小计。 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,item,des,price,price_unit,stocks,stocks_unit,created_dt,created_by,edited_dt 来自 state=1 的 price_list
按 id desc 排序

【问题讨论】:

  • select id,p_type,item,des,price,price_unit,stocks,stocks_unit,created_dt,created_by,edited_dt from price_list where state=1 order by id desc
  • 我在下面给出了一个选项,它使用汇总来计算 MySQL 内部的总价格。

标签: php mysql csv


【解决方案1】:

在循环中添加 sum 然后在 for 循环外添加包含 sum 行的新列

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

【讨论】:

    【解决方案2】:

    在循环之前设置一个$total = 0; 变量。在循环内,添加$total += $car->price;。然后在循环之后添加最后一行。

    【讨论】:

      【解决方案3】:

      假设您不想直接在 PHP 代码中进行任何聚合,实际上有一个纯 MySQL 解决方案可以解决您的问题。考虑以下查询:

      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_price 之外的任何列othernull

      这是一个简化演示的链接,展示了整个表的汇总技巧如何工作:

      Demo

      【讨论】:

        猜你喜欢
        • 2023-01-18
        • 2018-12-12
        • 1970-01-01
        • 1970-01-01
        • 2021-03-11
        • 1970-01-01
        • 2016-01-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多