Я пытаюсь построить таблицу, в которой по оси 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 !!)
Может ли кто-нибудь, пожалуйста, указать мне в правильном направлении?