From b09a42d4f2d25f30c0ba2a7bccad7243cccb307d Mon Sep 17 00:00:00 2001 From: loviuz Date: Tue, 28 Jan 2020 16:09:20 +0100 Subject: [PATCH] Ottimizzazione query su piano dei conti --- modules/partitario/edit.php | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/modules/partitario/edit.php b/modules/partitario/edit.php index 857e91ce2..4e1f7eebb 100644 --- a/modules/partitario/edit.php +++ b/modules/partitario/edit.php @@ -63,21 +63,14 @@ foreach ($primo_livello as $conto_primo) { '; // 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