php - 如何计算行和列中的值的总和?

标签 php mysql yii

我有一个值表,其中填充了月份名称和总和的数组。如何计算行和列中这些值的总和并将结果显示在结果列的结果字符串中? table

public function getReport($year=false)
    {           
        if (!empty($_GET['year'])) $year = (int)$_GET['year'];
        else $year = date ('Y');           

        $from_date = $year.'-01-01 00:00:00';
        $to_date = $year.'-12-31 00:00:00';

        // собираем гигантский запрос
        $fields = 'all_months.fio, all_months.active_count AS sum_active_count, all_months.active_sum AS sum_active_sum';
        $joins = "";

        $months = array('jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'decem');
        $months_ru = array('Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь');

        // результирующий запрос
        $data = array();
        // блок итого
        $data['result'] = array();

        // ставим ограничение по месяцу, если год текущий

        if ($year == (int)date('Y')) $max_month = date('m')-1;
        else $max_month = 11;

        foreach ($months as $key => $m)
        {
            if ($key > $max_month) break;

            // заголовки колонок запроса
            $data['months'][] = $m;
            $data['months_ru'][] = $months_ru[$key];

            $k = sprintf('%02.0d', ($key + 1));
            $fields .= ', '."\n".$m.'.active_count as '.$m.'_active_count, '.$m.'.active_sum as '.$m.'_active_sum,
                          '."\n".$m.'.realized_count as '.$m.'_realized_count, '.$m.'.realized_sum as '.$m.'_realized_sum';
            $joins .=  "\n"."LEFT JOIN tbl_report ".$m." ON ".$m.".date > '".$year."-".$k."-01 00:00:00' AND 
                ".$m.".date < '".$year."-".$k."-31 24:59:59' AND 
                ".$m.".fio = all_months.fio ";
        }

        // поулчаем данные запроса
        $query = "SELECT DISTINCT ".$fields."
                  FROM tbl_report all_months
                  ".$joins."
                  WHERE all_months.date > '$from_date' AND all_months.date < '$to_date' GROUP BY fio";
    //echo '<!--'.$query.'-->';

        //$db_data = Report::model()->findAllBySql($query);
        $db_data = Yii::app()->db->createCommand($query)->queryAll();

        foreach ($db_data as $row)
        {
            $data['rows'][] = $row;
        }

        // Собираем отчет по суммам по месяцам
        $fields = ' SUM(all_months.active_count) as all_active_count, SUM(all_months.active_sum) as all_active_sum,
                    SUM(all_months.realized_count) as all_realized_count, SUM(all_months.realized_sum) as all_realized_sum ';


        $joins = '';
        foreach ($months as $key => $m)
        {
            if ($key > $max_month) break;

            $k = sprintf('%02.0d', ($key + 1));
            $fields .= ', '."\n SUM(".$m.'.active_count) as '.$m.'_active_count, SUM('.$m.'.active_sum) as '.$m.'_active_sum,
                          '."\n SUM(".$m.'.realized_count) as '.$m.'_realized_count, SUM('.$m.'.realized_sum) as '.$m.'_realized_sum';
            $joins .=  "\n"."LEFT JOIN tbl_report ".$m." ON ".$m.".date > '".$year."-".$k."-01 00:00:00' AND 
                ".$m.".date < '".$year."-".$k."-31 24:59:59' AND 
                ".$m.".fio = all_months.fio ";
        }

        $query = "SELECT DISTINCT ".$fields."
                  FROM tbl_report all_months
                  ".$joins."
                  WHERE all_months.date > '".$year."-01-01 00:00:00' AND all_months.date < '".$year."-12-31 24:59:59'";
        //echo $query;
        $data['summary'] = Yii::app()->db->createCommand($query)->queryRow();

        // форматируем числа
        if (!empty($data['rows']) && is_array($data['rows']))
        foreach ($data['rows'] as &$row)
            if (!empty($data['months']) && is_array($data['months']))
            foreach ($data['months'] as $month)
            {
                $row[$month.'_active_count'] = (int)$row[$month.'_active_count'];
                $row[$month.'_active_sum'] = FormatHelper::MF($row[$month.'_active_sum']);
                $row[$month.'_realized_count'] = (int) $row[$month.'_realized_count'];
                $row[$month.'_realized_sum'] = FormatHelper::MF($row[$month.'_realized_sum']);
            }

        // форматируем результирующие строки
        if (!empty($data['months']) && is_array($data['months']))
        foreach ($data['months'] as $month)
            {
                $data['summary'][$month.'_active_count'] = (int)$data['summary'][$month.'_active_count'];
                $data['summary'][$month.'_active_sum'] = FormatHelper::MF($data['summary'][$month.'_active_sum']);
                $data['summary'][$month.'_realized_count'] = (int) $data['summary'][$month.'_realized_count'];
                $data['summary'][$month.'_realized_sum'] = FormatHelper::MF($data['summary'][$month.'_realized_sum']);
            }

        // разворачиваем порядок месяцев в обратном направлении
        //$data['months'] = array_reverse($data['months']);
        //$data['months_ru'] = array_reverse($data['months_ru']);
        //print_r( $months_ru );
        return $data;
    }

最佳答案

点击此链接::Here

这段代码将进入您的 View 文件

'columns'=>array(
                ..........
                array(
                        'name'=>'age',
                        'footer'=>'Total: ' . $model->getTotal($model->search()->getData(), 'age'),
                ),
                array(
                        'name'=>'weight',
                        'footer'=>'Total: ' . $model->getTotal($model->search()->getData(), 'weight'),
                ),
                ..........
        ),

这个进入你的模型文件

 public function getTotal($records, $column)
        {
                $total = 0;
                foreach ($records as $record) {
                        $total += $record->$column;
                }
                return $total;
        }

关于php - 如何计算行和列中的值的总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25841011/

相关文章:

php - Yii - ajax 加载表单元素的用户端验证

php - 按用户过滤数据库结果

php - 用于日程安排和考勤卡系统的最佳 php/mysql 日期格式?

MySQL 与 SQLite + UNIQUE 索引

mysql - Vagrant mysql 与 MySQLWB

php - 将 php 日期时间值与 mysql 查询进行比较

php - 在 yii 中声明全局变量并在 Controller 中使用它们

php - 使用 MySQL(和 PHP)搜索可用性?

php - MongoDB和PHP简单登录

yii - CGridView 显示来自两个表的数据?