Sommare i dati in una tabella

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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
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>";
?>
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
un'alternativa:
PHP:
<?php
$query = "SELECT SUM (costo) FROM tabella_costi";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
echo $row['costo'];
?>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
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
 

gracito

Utente Attivo
30 Mag 2010
109
0
0
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>

}
 

minatore

Utente Attivo
25 Set 2007
410
0
0
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
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
 

gracito

Utente Attivo
30 Mag 2010
109
0
0
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
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
 

gracito

Utente Attivo
30 Mag 2010
109
0
0
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
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
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
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.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
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:

gracito

Utente Attivo
30 Mag 2010
109
0
0
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
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)
 

gracito

Utente Attivo
30 Mag 2010
109
0
0
Ciao

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



Tipo Prezzo

TOTALE 0
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
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
Autore Titolo Forum Risposte Data
M Sommare i punteggi PHP 17
A sommare valori a video per lo stesso giorno jQuery 1
M [PHP] Sommare due campi calcolati PHP 3
maxnegri Sommare i prezzi dei prodotti aggiunti al carrello di diverse aziende con Select sum php mysqli PHP 10
C [PHP] Sommare o sottrarre a ZERO PHP 7
M [PHP] Sommare ore e minuti PHP 22
elpirata [PHP][RISOLTO] Sommare gli importi estratti da un ciclo while PHP 3
ste80 [PHP] sommare le ore PHP 24
L [PHP] Sommare campi e aggiornare tabella PHP 14
F Sommare valori di ogni periodo con SELECT PHP 7
C selezionare distinti id e sommare uguali PHP 1
clodiny come sommare dei record raggruppandoli per anno MySQL 33
A sommare valori in un array multidimensionale PHP 0
N Sommare due date PHP 4
G sommare valori più colonne MS Access 1
D Se non c'è il campo da sommare Javascript 2
B Sommare risultati db PHP 3
F [RISOLTO] Sommare data PHP 2
A Sommare campi stringa MYSQL PHP PHP 3
N Sommare iterazioni ciclo while PHP 5
Z Sommare i numeri con FOR Javascript 1
Z Sommare prezzi da campi multiple Javascript 1
M sommare input mascherati Javascript 0
Z Sommare i numeri PHP 2
L Datagrid selezionare e sommare un campo Visual Basic 0
G contare e sommare dopo JOIN Database 8
G Sommare caselle excel contrassegnate di un elenco Windows e Software 0
P come sommare dei numeri? PHP 2
M Come sommare elementi di un vettore in Visual basic Visual Basic 1
M Riportare in tabella HTML dati estratti con query SQL MySQL 0
I Assegnare dati fetch request ad una variabile globale Javascript 0
L PHPSpreadsheet inserire dati da file .xlsx/.xls su database PHP 2
L Ricezione dei dati su file php da modulo html PHP 6
L inserimento form dati multipli ? PHP 0
S Leggere dati da API e visualizzarli PHP 0
S problema con recupero dati tabella mysql PHP 2
E Progressbar estrazione dati da tabella mySQL Ajax 9
A invio massivo dati a file php Javascript 4
M Inviare dati nel db dopo risposta alert PHP 0
A recuperare i dati passati nel post PHP 1
L Estrazione dati php Database 6
L Estrazione dati casuali non doppioni MySQL 1
J Form inserimento dati in database Ajax 1
D Recupero dati da HDD esterno Hardware 0
L non duplicare dati in stato "aggiornamento" PHP 6
L inserire dati multi livello PHP 8
L input (rilevare cambio dati) PHP 3
L input dati con inser into select ? PHP 4
W Invio Dati ad un altra pagina Classic ASP 1
A Mostrare dati database per pagine PHP 2

Discussioni simili