Sommare i dati in una tabella

  • Creatore Discussione Creatore Discussione gracito
  • Data di inizio Data di inizio

gracito

Utente Attivo
30 Mag 2010
109
0
0
Ciao a tutti,

ho creato un db (mysql) dove inserisco tutte le spese della società, il db è composto così:

data_spesa | tipo_spesa | costo | etc .........

creata una pagina spese.php vorrei ottenere alla fine della lista il totale di tutti i costi,
ed effetuando una selezione per tipo_spesa ottenere i totali parziali.

Grazie
 
ciao
vorresti ottenere qualcosa del genere?

TIPO SPESA...... COSTO
amante........3.500,00
moglie...........50,00
figli........35.000,00
TOTALE.......38.550,00
se è cosi, secondo me, prima estrai i valori e poi li presenti

PHP:
<?php
//dati di connessione
$costi=array();
$tot_gen=0;
//estraggo i valori
$query=mysql_query("SELECT * FROM tabella_costi");
//e li leggo
while($riga=mysql_fetch_array($query)){
	$tipo=$riga['tipo_di_costo'];
	$entità=$riga['costo'];
	$tot_gen += $entita;//calcolo subito il totale
	$costi[$tipo]+=$entita;//e i parziali per tipo
}
//presento i dati
echo "<table><tr><td>tipo costo</td><td>costo</td></tr>";
foreach($costi as $tipo_costo => $valore){
	echo "<tr><td>$tipo_costo</td><td>$valore</td></tr>";
}
echo "<tr><td>TOTALE</td><td>$tot_gen</td></tr></table>";
?>
 
un'alternativa:
PHP:
<?php
$query = "SELECT SUM (costo) FROM tabella_costi";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
echo $row['costo'];
?>
 
ciao vampiresco
ma così trovi solo il totale generale, visto che vuole anche i parziali per tipo di spesa mi sembra più breve fare un'unica query e da questa elaborare totale e parziali.
l'unico problema è se il campo tipo_di_costo avesse un valore che non va bene per nominare una variabile, in qusto caso andrebbe trattato, es. sostituendo gli spazi con underscore
 
Ciao

Il campi che mi interessano del db sono sostanzialmente
2 tipo_spesa | costo.
Cosa voglio ottenere?
All'apertura della pagina spesa.php deve visualizzarmi tutti i dati del db.

Es.

tipo_spesa costo

posta 3
albergo 30
varie 20
albergo 10
posta 5
....... ..

Totale 68


se faccio la ricerca per albergo devo ottenere.

albergo 20
albergo 30

totale 50

questo è il codice.

PHP:
$db = mysql_connect("localhost","root","");
mysql_select_db("palestra", $db);

function getQuery($tipo_spese) {
    $query = "SELECT * FROM spese WHERE ";
    
       if (!empty($tipo_spese)) {
        $query .= "tipo_spese LIKE '$tipo_spese' AND ";
    }
   
        
          $query .= "1 = 1";
        
    return $query;
}
 
  
 ?>
<table width="900" border= "1" align="center" cellpadding="0" cellspacing="0" bgcolor="#00FF00">
        
<tr>
          
           <td width="130"><div align="center"><span class="style6"><b>Tipo</b></span></div></td>
          <td width="70"><div align="center"><span class="style6"><b>Prezzo</b></div></td>
          
	  
          <br>
   <?php

$result = mysql_query(getQuery( $tipo_spesa), $db) or die ("Errore: ".mysql_error());


while($myrow=mysql_fetch_array($result))

{
   
   echo
"<tr>
<td>$myrow[tipo_spesa]</td>
<td>$myrow[prezzo]</td>

}
 
Ciao, se ti interessano tutte le voci tipo_spesa e vuoi avere la somma
Eliox già ti ha risposto con Sum puoi avere la somma del campo costo

Se non ho capito bene scusami
 
ciao
piccola domanda:
come inserisci le voci di spesa con il loro costo?
ti chiedo questo perche se le inserisci con un campo di testo lo script può darti delle risposte erratre
(ed e meglio non avere risposte che averle sbagliate)
es.
inserisci per dieci volte
albergo 10,00
poi (l'errore di distrazione è sempre in agguato)
inserisci
alberga 1.000,00
quando vai a cercare la spesa per albergo ti trovi

01. albergo 10,00
......
10. albergo 10,00
totale 100,00

quando al contrario per l'albergo hai speso 1.100,00

inoltre
la data?
ti interessano le spese entro / prima / nel / tra / il / dopo?

penso che tu ci abbia pensato, ma volevo ricordarti uno dei principi basilari della programmazione:
garbage in, garbage out
 
Ciao
inserisco i dati attraverso una listbox per evitare errori di battitura.

Si vi è anche un campo data ma quello non è un problema.
Come ti dicevo ciò vorrei ottenere una schermata generele con tutte le voci e a fine tabella il totale es.

tipo_spesa costo

posta 3
albergo 30
varie 20
albergo 10
posta 5
....... ..

Totale 68

e poi selezionando il tipo_spesa ottenere i risultati parziali con il totale paeziale
per tipo.

Ciao
 
ciao
se quello che ti avevo indicato all'inizio ti andava bene per presentare tutta la lista delle spese
basta che da una select o altro campo di input di un form selezioni il tipo di spesa e tu aggiunga
PHP:
<?php 
//dati di connessione
$costi=array();
//qui questo if else
if(isset($_POST['tipo_spesa'])){//salvo opportuni controlli al $_POST o sul get se usi il get
	$wer=" WEHRE tipo_di_costo='".$_POST['tipo_spesa']."'";
}else{
	$wer="";
}

$tot_gen=0; 
//estraggo i valori 
$query=mysql_query("SELECT * FROM tabella_costi $wer"); //e qui la condizione
//e li leggo 
while($riga=mysql_fetch_array($query)){ 
    $tipo=$riga['tipo_di_costo']; 
    $entità=$riga['costo']; 
    $tot_gen += $entita;//calcolo subito il totale 
    $costi[$tipo]+=$entita;//e i parziali per tipo 
} 
//presento i dati 
echo "<table><tr><td>tipo costo</td><td>costo</td></tr>"; 
foreach($costi as $tipo_costo => $valore){ 
    echo "<tr><td>$tipo_costo</td><td>$valore</td></tr>"; 
} 
echo "<tr><td>TOTALE</td><td>$tot_gen</td></tr></table>"; 
?>
se selezioni es albergo ti ritrovi
albergo 10,00
albergo 20,00
totale 30,00
 
Ciao e grazie.

Riesco ad ottenere solo i risultati totali, e non quelli parziali

Es.
albergo 30,00
totale 30,00
e non
albergo 10,00
albergo 20,00
totale 30,00

All'apertura della pagina ottengo il totale per voci.

Es

Albergo 30
Gare 300
Spesevarie 300
......

Totale 630

Dove mi sono impasticiato?

Grazie
 
ciao
hai ragione, c'è stato un qui_pro_quo, io intendevo per parziali non le singole spese splittate, ma la somma per tipo di spesa.
se è così il problema diventa più semplice, prova in questo modo

PHP:
<?php  
//dati di connessione 

//qui questo if else 
if(isset($_POST['tipo_spesa'])){//salvo opportuni controlli al $_POST o sul get se usi il get 
    $wer=" WEHRE tipo_di_costo='".$_POST['tipo_spesa']."'"; 
}else{ 
    $wer=""; 
} 
$tot_gen=0;  
//estraggo i valori  
$query=mysql_query("SELECT * FROM tabella_costi $wer"); //e qui la condizione 
//se vuoi che i tipi si spesa si raggruppino cioe es tutti gli alberghi vicini
//dopo $wer metti ORDER BY tipo_di_costo
//e li leggo
echo "<table><tr><td>tipo costo</td><td>costo</td></tr>";
while($riga=mysql_fetch_array($query)){  
    $tipo=$riga['tipo_di_costo'];  
    $entità=$riga['costo'];  
    $tot_gen += $entita;//calcolo  il totale  
    echo "<tr><td>$tipo_costo</td><td>$entita</td></tr>";
}
echo "<tr><td>TOTALE</td><td>$tot_gen</td></tr></table>";
?>
mal che vada mi mandi a quel paese
 
ciao vampiresco
ma così trovi solo il totale generale, visto che vuole anche i parziali per tipo di spesa mi sembra più breve fare un'unica query e da questa elaborare totale e parziali.
l'unico problema è se il campo tipo_di_costo avesse un valore che non va bene per nominare una variabile, in qusto caso andrebbe trattato, es. sostituendo gli spazi con underscore

Meglio non usare parole di senso compiuto per definire delle tipologie, i vecchi Id fanno sempre comodo in questi casi.
 
ciao
siamo da capo?
comunque il concetto era questo
se uno ha una tabella tipi_spesa
id_ts | tipo_spesa
e una
id_co | data | id_ts | costo
può comodamente usare gli id relativi al tipo spesa
ma se, come detto da gracito ha solo la tabella
id | data | tipo_spesa | costo
il problema si presenta
 
Ultima modifica:
Ciao

ok ora riesco ad ottenere i totali parziali

albergo 10,00
albergo 20,00
totale 30,00

ma non riesco ad avere tutte le voci in dettaglio

es

albergo 10
albergo 20
Gare 300
Spesevarie 300
Gare 10
Spesevarie 10
......

Totale 650

PHP:
<?php
  
$db = mysql_connect("localhost","root","");
mysql_select_db("palestra", $db);

$tot_gen=0;  
if(isset($_POST['tipo_spesa'])){ 
    $wer=" WHERE tipo='".$_POST['tipo_spesa']."'"; 
}else{ 
    $wer=""; 
} 


 
$query=mysql_query("SELECT * FROM spese $wer"); //e qui la condizione 

echo "<table><tr><td>Gara</td><td>Tipo</td><td>Prezzo</td></tr>"; 
while($myrow=mysql_fetch_array($query)){  
    $tipo1=$myrow['tipo'];  
    $entita=$myrow['prezzo'];  
    $tot_gen += $entita;//calcolo subito il totale  
    $costi[$tipo1]+=$entita;//e i parziali per tipo  
 
   echo "<tr><td>$myrow[gara]</td><td>$tipo1</td><td>$entita</td></tr>"; 

 }  
echo "<tr><td></td><td>TOTALE</td><td>$tot_gen</td></tr></table>";  
?>



Grazie
 
ciao
prova ad aggiungere

PHP:
<?php
//....
$tot_gen=0;
$wer="";//riga da aggiungere
if(isset($_POST['tipo_spesa']) || $_POST['tipo_spesa']==""){  //riga da modificare
    $wer=" WHERE tipo='".$_POST['tipo_spesa']."'"; 
}else{  
    $wer="";  
}
//....
?>
all'apertura della pagina dovrebbe darti l'elenco completo
eventualmente nella (se usi la select) nella select di scelta del tipo di spesa

HTML:
<select name="tipo_spesa">
  <option value="">-tutte-</option>
  <option value="albergo">albergo</option>
  <option value="posta">posta</option>
  <!-- eccetera...-->
</select>
stai attente che nel value i nomi di tipo spesa siano uguali ai nomi che hai in tabella (comprese maiuscole/minuscole)
 
Ciao

continuo a disturbarti,
ho modificato come mi hai detto ma all'apertura della pagina non mi da nessun valore.



Tipo Prezzo

TOTALE 0
 
ciao
hai ragione, mea culpa ecc...,

PHP:
<?php
//....
if(isset($_POST['tipo_spesa']) && $_POST['tipo_spesa']!=""){  //riga da modificare 
//......
?>
poi dividi la query in modo da vederla con un var_dump
PHP:
<?php
$q="SELECT * FROM spese $wer";
var_dump($q);
$query=mysql_query($q); //e qui la condizione  
?>
il var dump dovrebbe restituirti
in caso di non post o post uguale vuoto
string(xy) "SELECT * FROM spese"
ne caso tu abbia fatto una selezione es alberghi
string(wz) "SELECT * FROM spese WHERE tipo='alberghi'"

p.s.
guarda che io ho scritto tipo= ,a verifica, se è il giusto nome del campo
 

Discussioni simili