Popolare campi tabella con totali estratti da database

  • Creatore Discussione Creatore Discussione elpirata
  • Data di inizio Data di inizio
adesso scrivi la query così, assicurandoti che ci sia uno spazio che precede e segue "union"
PHP:
$query = "SELECT
  DATE_FORMAT(data, \"%c-%Y\") as meseanno
, SUM(totale) as totalemese
FROM `commesse`
WHERE YEAR(data) BETWEEN 2016 AND 2020
GROUP BY meseanno UNION SELECT
  DATE_FORMAT(data, \"13-%Y\") as meseanno
, SUM(totale) as totalemese
FROM `commesse`
WHERE YEAR(data) BETWEEN 2016 AND 2020
GROUP BY meseanno";
 
Marino sei stato un grande,
non ho ben compreso cosa era errato nella precedente query, ma metterò le query al confronto e provero a comprenderlo.

Adesso dovrei sistemare solo quella parte di codice che mi permette di rendere la riga che contiene la scritta "Totale"
diversa dalle altre, prima avevo il codice nel php adesso il tutto è generato dalla query SELECT e mi sono incartato completamente.

HTML:
<tr style='color:green; font-weight: bold; text-align:left;'>
<th class='text-nowrap' scope='row' style='background-color:black; color:yellow;'>Totale Incasso</th>

L'immagine che riporto di seguito è generata proprio con php...

formattazione_cella_totale.png
 
vedi se va bene così,
PHP:
       $anni = array_keys($fatturati);
       for($i=1; $i<=13;$i++){
           $tr = "<tr>";
           if ($i == 13) {
               $tr = '<tr style="color:yellow; background-color:black; font-weight: bold; text-align:left;">';
           }
           echo $tr.'<td>'.$mesi[$i].'</td>';
           foreach($anni as $anno)
           {
              echo '<td>'.$fatturati[$anno][$i].' '.$euro.'</td>';
           }
           echo "</tr>";
1576259832130.png
 
Un buongiorno a tutto il forum ed uno particolare e meritatissimo a Marino51,
grazie al suo supporto ho risolto il problema e con poche righe di codice mi ha permesso di integrare il totale.

Per correttezza e per i posteri lascio il codice completo

PHP:
<?php
$fatturati = ['2016'=>array_fill_keys(range(1,12),0),
                   '2017'=>array_fill_keys(range(1,12),0),
                   '2018'=>array_fill_keys(range(1,12),0),
                   '2019'=>array_fill_keys(range(1,12),0),
                   '2020'=>array_fill_keys(range(1,12),0),
                  
 ];

$query =
"SELECT
DATE_FORMAT(data, \"%c-%Y\") as meseanno
, SUM(totale) as totalemese
FROM `commesse`
WHERE YEAR(data) BETWEEN 2016 AND 2020
GROUP BY meseanno UNION SELECT
DATE_FORMAT(data, \"13-%Y\") as meseanno
, SUM(totale) as totalemese
FROM `commesse`
WHERE YEAR(data) BETWEEN 2016 AND 2020
GROUP BY meseanno";

$result = $mysqli->query($query);
while($data = mysqli_fetch_assoc($result)){
    $d = explode('-', $data['meseanno']); // in $d[0] ho il mese, in $d[1] l'anno;
    $fatturati[$d[1]][$d[0]] = $data['totalemese'];
}

// CREO UN ARRAY DI MESI
$mesi = [1=>'Gennaio', 2=>'Febbraio', 3=>'Marzo', 4=>'Aprile', 5=>'Maggio', 6=>'Giugno', 7=>'Luglio', 8=>'Agosto', 9=>'Settembre', 10=>'Ottobre', 11=>'Novembre', 12=>'Dicembre', 13=>'Totale'];
?>

<table class='table table-striped > fatturato'>
  <thead>
    <tr>
      <th scope='col'></th>
      <th class='intestazione_fatturato' scope='col'>
        Incasso<br>
        2016
      </th>

      <th class='intestazione_fatturato' scope='col'>
        Incasso<br>
        2017
      </th>

      <th class='intestazione_fatturato' scope='col'>
        Incasso<br>
        2018
      </th>

      <th class='intestazione_fatturato' scope='col'>
        Incasso<br>
        2019
      </th>

      <th class='intestazione_fatturato' scope='col'>
        Incasso<br>
        2020
      </th>
    </tr>
  </thead>

  <tbody>
  <?php
    $euro = "€";
    $anni = array_keys($fatturati);
    for($i=1; $i<=13;$i++){
        $tr = "<tr>";
        if ($i == 13) {
            $tr = '<tr style="color:yellow; background-color:black; font-weight: bold; text-align:left;">';
        }
        echo $tr.'<td>'.$mesi[$i].'</td>';
        foreach($anni as $anno)
        {
          echo '<td>'.$euro.' '.$fatturati[$anno][$i].'</td>';
        }
        echo "</tr>";
          }
  ?>
</tbody>
</table>


Grazie ancora per il supporto
 

Discussioni simili