Somma righe in corrispondenza

pup3770

Utente Attivo
30 Mag 2012
122
0
16
Ciao Ragazzi,
so benissimo che è molto tardi infatti, sfinito, sto per andare a letto. Sono stato fino ad ora a provare a trovare la soluzione per non disturbarvi ma nulla.

Il problema è il seguente:
Ho due tabelle:
Codice:
dipendenti(id_dipendente, nome, cognome, sesso, telefono, mansione)
ordini(id_ordine, id_dipendente, tipo_articoli, quantita)


Adesso desidero prima capire in sql e poi implementare in php come mostrare una schermata in cui viene visualizzato il totale dato dalla somma delle quantita degli ordini fatto da un dipendente e il suo rispettivo nome e cognome.

In SQL ho scritto la query:
Codice:
SELECT o.id_dipendente, d.nome, d.cognome, SUM( quantita ) 
FROM ordini o, dipendenti d
WHERE o.id_dipendente = d.id_dipendente
GROUP BY o.id_dipendente

e funziona correttamente.

Adesso devo creare lo script in php.
Ho, mediante phpmyadmin di MAMP generato il codice PHP per questione di tempo e mi ritrovo il codice seguente:
PHP:
<html>
<head>
<title> Visualizzazione l'aggregazione secondo tipo_articoli </title>
</head>
<body>

<font color="#FF0000" size = 5> Pagina in cui viene visualizzata l'aggregazione secondo tipo_articoli </font>
	

<?php
	
	$connessione = mysql_connect("localhost","root","root") or die ("ATTENZIONE: Errore di connessione al database\n");
	
	$selezione_db = mysql_select_db("ProgDataWarehouse", $connessione) or die ("ATTENZIONE: Errore nella selezione del database\n");


	$query = "SELECT o.id_dipendente, d.nome, d.cognome, SUM('quantita') \n"
    . "FROM ordini o, dipendenti d\n"
    . "WHERE o.id_dipendente = d.id_dipendente\n"
    . "GROUP BY d.id_dipendente LIMIT 0, 30 ";

$result = mysql_query($query);


while ($row = mysql_fetch_assoc($result)) { 
                
                echo "ID dipendente: <strong>{$row['id_dipendente']}</strong><br>"; 
                
                
                $subSql   = "SELECT * FROM dipendenti WHERE id_dipendente = {$row['id_dipendente']}"; 
                $subQuery = mysql_query($subSql, $connessione); 
                $subRow   = mysql_fetch_assoc($subQuery); 
                 
                echo "Nome dipendente: <strong>{$subRow['nome']}</strong><br>"; 
                echo "Cognome dipendente: <strong>{$subRow['cognome']}</strong><br>";                
                
                
                echo "Quantita': <strong>{$row['quantita']}</strong><br>"; 
                 
                   
                echo "<br><br>===========================<br><br>"; 
            } 

?>
</body>
</html>

Funziona tutto, mi aggrega correttamente, mi prende l'id_dipendente corretto, il nome e il cognome corretto dei dipendenti, il problema è che la quantita non me la visualizza.
Come mai non riesco a visualizzarla? Immagino ci sia qualche problema nell'introduzione dei valori da sommare nel ciclo while. Come poter risolvere il problema?
 

pup3770

Utente Attivo
30 Mag 2012
122
0
16
Intanto grazie per la partecipazione, comunque continua a non mostrare il contenuto. Stanotte mi è venuto un flash, ma visto che sono in un ciclo, non mi conviene fargli memorizzare la quantità ad ogni iterazione quando trova d.id_dipendente == o.id_dipendente.
Però continua ad esserci qualcosa che non mi quadra nell'implementazione.
 

pup3770

Utente Attivo
30 Mag 2012
122
0
16
Risolto.


Seguendo l'esempio al link precedente e seguendo anche il consiglio di
adesso funziona, come ho fatto:
Ho sostituito la stringa:
PHP:
echo "Quantita': <strong>{$row['quantita']}</strong><br>";

con la stringa:
PHP:
echo "Quantita': <strong>{$row['SUM(quantita)']}</strong><br>";

il consiglio di
è corretto perché mettendo sia in:
PHP:
$query = "SELECT o.id_dipendente, d.nome, d.cognome, SUM(quantita) \n"
    . "FROM ordini o, dipendenti d\n"
    . "WHERE o.id_dipendente = d.id_dipendente\n"
    . "GROUP BY d.id_dipendente LIMIT 0, 30 ";

al posto di:
Codice:
SUM(quantita)
metto
Codice:
SUM(o.quantita)
e nel ciclo while bisogna scrivere:
Codice:
echo "Quantita': <strong>{$row['SUM(o.quantita)']}</strong><br>";

Ragazzi grazie mille per i vostri consigli e per questo bel forum che posso dire funziona bene; lo dico io che sono sempre stato contrario ai forum invece fino ad oggi qui mi sono trovato bene e incentivato a ragionare e provare.

Grazie di tutto
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
al sum dagli as, poi, secondo me, devi raggruppare secondo gli id_dipendente che hai negli ordini, nella tabella dipendenti l'id_dipendente è (dovrebbe essere) unico quindi assurdo dargli il group by
PHP:
<?php
//..........
 $query = "SELECT o.id_dipendente, d.nome, d.cognome, SUM(o.quantita) as totale
    FROM ordini o, dipendenti d 
    WHERE o.id_dipendente = d.id_dipendente 
    GROUP BY o.id_dipendente LIMIT 0, 30 ";
//......
?>

poi googlando ho trovato qualcosa (ma non sono sicuro)
nel while prova a mettere (comunque prima prova cosi come l'hai fatto)
PHP:
echo "Quantita': <strong>{$row['SUM(o.quantita)']}</strong><br>";
oppure
PHP:
echo "Quantita': <strong>{$row['totale']}</strong><br>";

prova, al massimo siamo punto e a capo
 

pup3770

Utente Attivo
30 Mag 2012
122
0
16
grazie
, la modifica di
e di
PHP:
echo "Quantita': <strong>{$row['totale']}</strong><br>";
funziona benissimo ed anzi è meglio per questione di leggibilità.
Per quanto riguarda:
poi, secondo me, devi raggruppare secondo gli id_dipendente che hai negli ordini, nella tabella dipendenti l'id_dipendente è (dovrebbe essere) unico quindi assurdo dargli il group by
non riesco a seguirti; che id_dipendente della tabella dipendenti è unico si, è sia chiave e sia generato automaticamente grazie alla funzione
Codice:
AI
(auto increment), in merito al non utilizzo di
Codice:
GROUP BY
non riesco a seguirti.
 

pup3770

Utente Attivo
30 Mag 2012
122
0
16
Cioè seguendo quanto scritto sui testi e sugli esempi, vedi link:
HTML:
http://www.liceofoscarini.it/didattic/data-base/sql/groupby.html

il GROUP BY io lo utilizzo per raggruppare secondo
Codice:
o.id_dipendente
perché realmente io voglio che ogni id_dipendente sia univoco anche in questa visualizzazione e venga sommato il valore della quantita ogni qual volta viene visto dal ciclo che l'id_dipendente esiste ed è uguale ai precedenti.

Non vorrei sbagliarmi, come dicevo non sono molto ferrato, però credo che altra soluzione non ce ne sia
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
per il gruop by era una mia impressione, ma probabilmente è lo stesso.
tu fai
GROUP BY d.id_dipendente
cioe raggruppi secondo gli id presenti nella tabella dipendenti, ma in quella tabella l'id dovrebbe essere unico
mentre nella tabella ordini un dipendente può fare più ordini quindi il suo id può comparire più volte nella tabella ordini, per quello dicevo di fare

GROUP BY o.id_dipendente
 

pup3770

Utente Attivo
30 Mag 2012
122
0
16
certo scusa hai ragionissima, non avevo capito cosa volevi dire perché nel listato che ho messo nella discussione avevo messo d.id_dipendente mentre quando tu mi rispondevi io guardavo lo script che modificavo e testavo e questa modifica già l'avevo apportata, infatti non capivo dove dicevi tu. Cmq certo essendo che id_dipendente è chiave della tabella dipendenti, a me conviene raggruppare per id_dipendente di ordine.
Adesso funziona tutto e correttamente.

Grazie ancora
 

pup3770

Utente Attivo
30 Mag 2012
122
0
16
Scusate l'orario ma ero a mangiare fuori per festeggiare il mio 25 esimo compleanno ;-)
Il codice funzionante è:

PHP:
<html>
<head>
<title> Visualizzazione l'aggregazione secondo id_dipendente </title>
</head>
<body>

<font color="#FF0000" size = 5> Pagina in cui viene visualizzata l'aggregazione secondo id_dipendente </font>
	

<?php
	
	$connessione = mysql_connect("localhost","root","root") or die ("ATTENZIONE: Errore di connessione al database\n");
	
	$selezione_db = mysql_select_db("ProgDataWarehouse", $connessione) or die ("ATTENZIONE: Errore nella selezione del database\n");


	$query = "SELECT o.id_dipendente, d.nome, d.cognome, SUM(quantita) as totale \n"
    . "FROM ordini o, dipendenti d\n"
    . "WHERE o.id_dipendente = d.id_dipendente\n"
    . "GROUP BY o.id_dipendente LIMIT 0, 30 ";
    	
	$result = mysql_query($query);

	$numrows = mysql_num_rows($result); 
         
        echo "<big>Sono stati letti <span style=\"color:red\">{$numrows}</span> ordini per dipendente</big>"; 
        echo "<h2><big> Dati tabella Ordini aggregati per dipendente </big></h2>"; 


while ($row = mysql_fetch_assoc($result)) { 
                
                echo "ID dipendente: <strong>{$row['id_dipendente']}</strong><br>"; 
                
                
                $subSql   = "SELECT * FROM dipendenti WHERE id_dipendente = {$row['id_dipendente']}"; 
                $subQuery = mysql_query($subSql, $connessione); 
                $subRow   = mysql_fetch_assoc($subQuery); 
                 
                echo "Nome dipendente: <strong>{$subRow['nome']}</strong><br>"; 
                echo "Cognome dipendente: <strong>{$subRow['cognome']}</strong><br>";                
                
                echo "Quantita': <strong>{$row['totale']}</strong><br>"; 
                 
                 
                 
                echo "<br><br>===========================<br><br>"; 
            } 

?>
</body>
</html>

Spero possa esservi d'aiuto. Se riscontrate problemi o migliorie accetto volentieri.
 
Discussioni simili
Autore Titolo Forum Risposte Data
G scomponi un numero intero come la somma di 20 numeri interi casuali maggiori di zero diversi fra loro Javascript 1
F Somma di più tabelle da script Javascript 0
E Help Sql somma orari PHP 32
M Somma inversa di Array C/C++ 2
A Moltiplicazione tramite somma PHP 5
A Somma di orari con centesimi PHP 1
V Somma foreach PHP 2
V Somma Risposte PHP 5
V Query per una somma PHP 2
G Somma dei Minuti PHP 3
L somma e informa PHP 16
L query somma PHP 8
L salvare somma con sottrazione PHP 1
W fare la somma di un valore estratto da un ciclo while Classic ASP 0
A Somma delle colonne di una tabella pivot Database 6
MarcoGrazia [PHP] Unioni di due array con somma di valori PHP 6
R php Somma valori in file csv PHP 2
Emix [Javascript] Somma con array input HTML Javascript 1
A [MS Access] Somma Campi se in altro campo presente un determinato testo MS Access 1
A [Javascript] Somma di un campo in una tabella dinamica Javascript 0
T Problema somma mysql MySQL 8
A [Javascript] Somma di input dinamici Javascript 1
B Somma armonica jQuery 3
elpirata [PHP][RISOLTO] Effettuare la somma dei tempi di lavorazione PHP 3
P [PHP] somma totale imponibile e totale fattura PHP 3
Z Somma di numeri in una lista di app inventor Sviluppo app per Android 0
V Somma anni ad una data con datepicker jQuery 1
A [PHP] Somma in unico risultato di più tabelle PHP 6
T [PHP] matrice con somma diagonali PHP 2
Trapano [PHP] somma di una lista di pagamenti PHP 2
Bunz [Javascript] somma orario input + calcolo straordinario Javascript 3
P Query con Somma di un Campo , aggregazione e join Database 3
G Somma variabili impossibile Javascript 3
A Aiuto somma di campi MS Access 0
A Somma di sottoreport su report Database 2
A Controllo somma di valori in una select Ajax 1
R Sistema di conteggio (somma) HTML e CSS 4
G Somma dati se codice uguale Classic ASP 4
G Somma di report e sottoreport MS Access 0
Emix Somma automatica checkbox Javascript 1
Akuma Somma dei campi in una tabella PHP 1
felino Microsoft Excel: somma su un'intera colonna Windows e Software 1
felino [JS] Passare un array ed effettuare la somma degli elementi Javascript 2
N Somma di variabili PHP 3
V perchè una somma può non funzionare? PHP 4
M Somma di due record MySQL 7
blips Controllo somma di valori in una select Javascript 5
C [RISOLTO] Problema somma td, prende solo il primo valore jQuery 7
Emix Somma su punti con controllo vip PHP 5
L Somma solo se non riappare elemento PHP 4

Discussioni simili