我有一个值表,其中填充了一系列月份名称和总和。如何计算行和列中这些值的总和,并在结果列中的结果字符串中显示结果?
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;
}
答案 0 :(得分:2)
点击此链接:: Here
这段代码转到你的视图文件
'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;
}