PHP & MySQL

Data Retrieval - Part 1

by Andrea Spera

In questo semplice esempio accedo ad un database remoto, applico delle query ed espongo i dati in forma tabellare e grafica.
Per collegarmi al database scrivo il seguente codice all'inizio del file.
<?php
$_CONFIG['host'] = "NOME HOST";
$_CONFIG['user'] = "USER NAME";
$_CONFIG['pass'] = "EVTL PASSWORD";
$_CONFIG['dbname'] = "NOME DB";
$conn=mysqli_connect($_CONFIG['host'], $_CONFIG['user'], $_CONFIG['pass'], $_CONFIG['dbname']);
mysqli_set_charset($conn, "utf8");
?>
A scopo dimostrativo, mostro inizialmente il contenuto delle due tabelle. Qui sotto il codice per la tabella tbl_ordini e successivamente l'output di entrambe le tabelle.
<table>
<tr>
<td>id_ordine</td>
<td>id_venditore</td>
<td>esercizio</td>
<td>periodo</td>
<td>importo</td>
</tr>
<?php
$query = mysqli_query($conn,"
SELECT *
FROM tbl_ordini;
");
while($row = mysqli_fetch_array($query, MYSQLI_ASSOC))
{
echo "<tr><td>" . $row["id_ordine"] . "</td>
<td>" . $row["id_venditore"] . "</td>
<td>" . $row["esercizio"] . "</td>
<td>" . $row["periodo"] . "</td>
<td>" . number_format($row["importo"], 2, ",", ".") . " €</td>
</tr>";
}
?>
</table>
tabella tbl_venditori
id_venditore nome cognome area
1AmbrogioRossiLombardia
2ElenaMarangonVeneto
3MimmoRossiCampania
4MariaParodiLiguria
tabella tbl_ordini
id_ordine id_venditore esercizio periodo importo
1320191956,00 €
24201921.050,22 €
312019146,12 €
4220191889,33 €
5220192879,00 €
6120192564,00 €
7320193321,00 €
8320193645,66 €
91201943.213,33 €
10220194789,33 €
11220193945,22 €
12420195987,33 €
1342019475,99 €
144201951.055,00 €
15220193987,00 €
163201951.104,00 €
17420191987,00 €
Collego le due tabelle attraverso l'id_venditore.
Qui sotto la sintassi SQL. La stampa a video รจ realizzata da un ciclo while del tutto analogo a quanto fatto per la tbl_venditori.
<?php
$query = mysqli_query($conn,"
SELECT *
FROM tbl_ordini O
INNER JOIN tbl_venditori V
ON O.id_venditore=V.id_venditore;
");
?>
Query flat
id_ordine nome cognome area esercizio periodo importo
3AmbrogioRossiLombardia2019146.12 €
6AmbrogioRossiLombardia20192564.00 €
9AmbrogioRossiLombardia201943213.33 €
4ElenaMarangonVeneto20191889.33 €
5ElenaMarangonVeneto20192879.00 €
10ElenaMarangonVeneto20194789.33 €
11ElenaMarangonVeneto20193945.22 €
15ElenaMarangonVeneto20193987.00 €
1MimmoRossiCampania20191956.00 €
7MimmoRossiCampania20193321.00 €
8MimmoRossiCampania20193645.66 €
16MimmoRossiCampania201951104.00 €
2MariaParodiLiguria201921050.22 €
12MariaParodiLiguria20195987.33 €
13MariaParodiLiguria2019475.99 €
14MariaParodiLiguria201951055.00 €
17MariaParodiLiguria20191987.00 €
Infine eseguo livelli adeguati di raggruppamento, espongo in forma tabellare come fatto precedentemente e aggiungo una rappresentazione grafica.
Propongo due viste: per periodo e per venditore.
<?php
$query = mysqli_query($conn,"
SELECT O.esercizio,O.periodo,Sum(O.importo) AS Totale
FROM tbl_ordini O
INNER JOIN tbl_venditori V
ON O.id_venditore=V.id_venditore
GROUP BY O.periodo;
");
?>
Query per periodo
esercizio periodo importo
201912.878,45 €
201922.493,22 €
201932.898,88 €
201944.078,65 €
201953.146,33 €
Fra i tag <head></head>
<script type = "text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script>
google.charts.load('current', {packages: ['corechart']});
google.charts.setOnLoadCallback(drawChart_Bar);
function drawChart_Bar()
{
var data = google.visualization.arrayToDataTable([
['Periodo','Importo'],
<?php
$query = mysqli_query($conn,"
SELECT O.esercizio, O.periodo, Sum(O.importo) AS Totale
FROM tbl_ordini O
INNER JOIN tbl_venditori V
ON O.id_venditore = V.id_venditore
GROUP BY O.periodo;
");
while($row = mysqli_fetch_array($query, MYSQLI_ASSOC))
{
echo "['" . $row["periodo"] . "'," . $row["Totale"] . "],";
}
?>
]);
var options = {
title:'Grafico per periodo',
legend:'none',
is3D:false,
width:'100%',
height:'100%',
backgroundColor:{fill:'transparent'},
series:{
0:{color:'#4488cc'},
},
hAxis:{minValue:0},
vAxis:{minValue:0, gridlineColor:'#cccccc'},
isStacked:false,
}
var chart = new google.visualization.ColumnChart(document.getElementById('chartBarId'));
chart.draw(data,options);
}
</script>
Fra i tag <body></body>
<div id="chartBarId">Caricamento del grafico in corso.. </div>
Caricamento del grafico in corso..
<?php
$query = mysqli_query($conn,"
SELECT V.cognome,V.nome,Sum(O.importo) AS Totale
FROM tbl_ordini O
INNER JOIN tbl_venditori V
ON O.id_venditore=V.id_venditore
GROUP BY V.cognome,V.nome
ORDER BY V.cognome;
");
?>
Query per venditore
cognome nome importo
MarangonElena4.489,88 €
ParodiMaria4.155,54 €
RossiAmbrogio3.823,45 €
RossiMimmo3.026,66 €
Da aggiungere al codice precedente, fra i tag <head></head> e <script></script>
google.charts.setOnLoadCallback(drawChart_Pie);
function drawChart_Pie()
{
var data = google.visualization.arrayToDataTable([
['Venditore','Importo'],
<?php
$query = mysqli_query($conn,"
SELECT V.cognome, V.nome, Sum(O.importo) AS Totale
FROM tbl_ordini O
INNER JOIN tbl_venditori V
ON O.id_venditore=V.id_venditore
GROUP BY V.cognome, V.nome
ORDER BY V.cognome;
");
while($row = mysqli_fetch_array($query, MYSQLI_ASSOC))
{
echo "['" . $row["nome"] . " " . $row["cognome"] . "'," . $row["Totale"] . "],";
}
?>
]);
var options = {
title:'Grafico per venditore',
legend:{position:'right', maxLines:3,},
is3D:false,
width:'100%',
height:'100%',
backgroundColor:{fill:'transparent'},
}
var chart = new google.visualization.PieChart(document.getElementById('chartPieId'));
chart.draw(data,options);
}
Fra i tag <body></body>
<div id="chartPieId">Caricamento del grafico in corso.. </div>
Caricamento del grafico in corso..