построить сводную таблицу с помощью таблицы Google Chart - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь построить таблицу, в которой по оси v показан список свойств, по оси h - список месяцев, и таблицу следует построить по соответствующим значениям.

Я создал свой объект Json, используя серию запросов и операций, но, наконец, я его достиг!

Запрос на получение JSON:

$rows = array();
    $table = array();

    $table['cols'] = array(
        array('label' => 'Fraccao', 'type' => 'string'),
        array('label' => 'Data', 'type' => 'date'),
        array('label' => 'Valor', 'type' => 'number')
    );

$query_detalhes = "SELECT * FROM TbFraccao INNER JOIN TbLocal on TbFraccao.FkLocal=TbLocal.PkLocal INNER JOIN TbEmpresa ON TbLocal.FkEmpresa=TbEmpresa.PkEmpresa";

$result_detalhe = mysqli_query($link, $query_detalhes);

// dados para grafico

$listagem = "";

while( $row_detalhe = mysqli_fetch_assoc($result_detalhe)){
 $id_fraccao = $row_detalhe['PkFraccao'];
 $id_nome = $row_detalhe['FraccaoNome'];
 $id_area = $row_detalhe['FraccaoArea'];
 $id_tipo = $row_detalhe['TipoNome'];
 $id_local = $row_detalhe['LocalNome'];
 $id_dono = $row_detalhe['EmpresaNome'];
 $id_morada = $row_detalhe['LocalMorada'];
 $id_cp = $row_detalhe['LocalCp'];

$id_coluna_tabel = $id_local . " - " . $id_nome;
// OBTER DATA MAIS ANTIGA
// decidir qual é a data mais velha que me interessa





$query_old_date = "SELECT MIN(ContratoFraccaoInicio) AS INICIO, MAX(ContratoFraccaoFim) AS FIM FROM TbContratoFraccao ORDER BY ContratoFraccaoInicio ASC";
$result_old_date = mysqli_query($link, $query_old_date);

while($datas = mysqli_fetch_assoc($result_old_date)){

    $old_date = $datas['INICIO'];
    $end_date = $datas['FIM'];


$data_inicio = date('Y-m-d', strtotime($old_date));
$data_fim = date('Y-m-d', strtotime($end_date));


$start    = (new DateTime($data_inicio));
$end      = (new DateTime($data_fim))->modify('first day of next month');
$interval = DateInterval::createFromDateString('1 month');
$period   = new DatePeriod($start, $interval, $end);

foreach ($period as $dt) {
   $mes =  $dt->format("Y-m-d");




    $query_valor_mes = "SELECT MAX(Data) AS DATAVALOR FROM TbContratoFracaoPreco WHERE FkFraccao='$id_fraccao'  and data<='" . $mes . "'";

    $result_valor_mes = mysqli_query($link, $query_valor_mes);

    while($row_valor_mes = mysqli_fetch_assoc($result_valor_mes)){
        $data_valor = $row_valor_mes['DATAVALOR'];




        $query_obter_valor = " SELECT * FROM TbContratoFracaoPreco WHERE FkFraccao='$id_fraccao' and data='" . $data_valor . "'";
        $result_obter_valor = mysqli_query($link, $query_obter_valor);

        while($row_renda = mysqli_fetch_assoc($result_obter_valor)){

            $rent = $row_renda['ContratoFracaoPreco'];
            $tabela_fraccao = $row_renda['$id_fraccao'];

            $date_year = date('Y', strtotime($mes));
            $date_month = date('m', strtotime($mes))-1;
            $date_day = date('d', strtotime($mes));

            $listing =  "Date(" . $date_year.", " . $date_month .", " . $date_day . ")";

//echo $id_local . ", " . $id_nome . " - ". $mes . " - ". $rent ."<br>";
                $temp = array();
  $temp[] = array('v' => (string) $id_coluna_tabel);
  $temp[] = array('v' => (string) $listing);
  $temp[] = array('v' => (float) $rent);
  $rows[] = array('c' => $temp);

$table['rows'] = $rows;

$dados_chart = json_encode($table);

        };



    };
};
};};

После построения объекта Json ($ dados_chart) я определяю таблицу:

google.charts.load('current', {'packages':['table']});
google.charts.setOnLoadCallback(drawChart);

function drawChart() {

 var data = new google.visualization.DataTable(<?php echo $dados_chart;?>);

  var options = {




        };


  var table = new google.visualization.Table(document.getElementById('chart'));
   table.draw(data, {showRowNumber: false, width: '100%', height: '100%'});


}

Теперь, когда у меня есть таблица, я хочу представить ее как сводную таблицу (довольно просто в Excel !!)

enter image description here

Может ли кто-нибудь, пожалуйста, указать мне в правильном направлении?

1 Ответ

0 голосов
/ 08 ноября 2018

Если вы не хотите производить агрегацию самостоятельно (не так просто, как в Excel), вас может заинтересовать делегат, который работает с компонентом Database Engine, но не все базы данных поддерживают сводные таблицы.

PostgreSQL позволяет создавать сводные таблицы с использованием кросс-таблицы в модуле tablefunc.

Документы PostgreSQL - tablefunc

Создание сводных таблиц в PostgreSQL с использованием кросс-таблицы

MariaDB (Форк MySQL) имеет специальный механизм хранения, называемый CONNECT, который имеет

Документы MariaDB - поворот в MariaDB

...