Ottimizzazione query su piano dei conti

This commit is contained in:
loviuz 2020-01-28 16:09:20 +01:00
parent ff4db55ed0
commit b09a42d4f2
1 changed files with 3 additions and 10 deletions

View File

@ -63,21 +63,14 @@ foreach ($primo_livello as $conto_primo) {
<table class="table table-striped table-hover table-condensed" style="margin-bottom:0;">';
// Livello 3
$query3 = 'SELECT `co_pianodeiconti3`.*, `clienti`.`idanagrafica` AS id_cliente, `fornitori`.`idanagrafica` AS id_fornitore FROM `co_pianodeiconti3` LEFT OUTER JOIN `an_anagrafiche` `clienti` ON `clienti`.`idconto_cliente` = `co_pianodeiconti3`.`id` LEFT OUTER JOIN `an_anagrafiche` `fornitori` ON `fornitori`.`idconto_fornitore` = `co_pianodeiconti3`.`id` WHERE `idpianodeiconti2` = '.prepare($conto_secondo['id']).' ORDER BY numero ASC';
$query3 = 'SELECT `co_pianodeiconti3`.*, movimenti.numero_movimenti, movimenti.totale FROM `co_pianodeiconti3` LEFT OUTER JOIN (SELECT COUNT(id) AS numero_movimenti, idconto, SUM( ROUND(totale,2)) AS totale FROM co_movimenti GROUP BY idconto) movimenti ON co_pianodeiconti3.id=movimenti.idconto WHERE `idpianodeiconti2` = '.prepare($conto_secondo['id']).' ORDER BY numero ASC';
$terzo_livello = $dbo->fetchArray($query3);
foreach ($terzo_livello as $conto_terzo) {
// Se il conto non ha documenti collegati posso eliminarlo
$numero_movimenti = $dbo->fetchNum('SELECT id FROM co_movimenti WHERE idconto = '.prepare($conto_terzo['id']));
$numero_movimenti = $conto_terzo['numero_movimenti'];
// Calcolo totale conto da elenco movimenti di questo conto
$query = 'SELECT co_movimenti.* FROM co_movimenti
LEFT OUTER JOIN co_documenti ON co_movimenti.iddocumento = co_documenti.id
LEFT OUTER JOIN co_tipidocumento ON co_documenti.idtipodocumento = co_tipidocumento.id
WHERE co_movimenti.idconto='.prepare($conto_terzo['id']).' AND co_movimenti.data >= '.prepare($_SESSION['period_start']).' AND co_movimenti.data <= '.prepare($_SESSION['period_end']).' ORDER BY co_movimenti.data DESC';
$movimenti = $dbo->fetchArray($query);
$totale_conto = sum(array_column($movimenti, 'totale'));
$totale_conto = $conto_terzo['totale'];
$totale_conto = ($conto_primo['descrizione'] == 'Patrimoniale') ? $totale_conto : -$totale_conto;
// Somma dei totali