ciao
prova a sostituire
SUM('quantita')
con
SUM(o.quantita)
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:
e funziona correttamente.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
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:
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.Codice 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>
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?
ciao
prova a sostituire
SUM('quantita')
con
SUM(o.quantita)
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.
Risolto.
Seguendo l'esempio al link precedente e seguendo anche il consiglio diadesso funziona, come ho fatto:borgo italia
Ho sostituito la stringa:
con la stringa:Codice PHP:echo "Quantita': <strong>{$row['quantita']}</strong><br>";
il consiglio diCodice PHP:echo "Quantita': <strong>{$row['SUM(quantita)']}</strong><br>";
è corretto perché mettendo sia in:borgo italia
al posto di:Codice 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 ";
mettoCodice:SUM(quantita)e nel ciclo while bisogna scrivere:Codice:SUM(o.quantita)
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.Codice:echo "Quantita': <strong>{$row['SUM(o.quantita)']}</strong><br>";
Grazie di tutto
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
poi googlando ho trovato qualcosa (ma non sono sicuro)Codice 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 ";
//......
?>
nel while prova a mettere (comunque prima prova cosi come l'hai fatto)
oppureCodice PHP:echo "Quantita': <strong>{$row['SUM(o.quantita)']}</strong><br>";
prova, al massimo siamo punto e a capoCodice PHP:echo "Quantita': <strong>{$row['totale']}</strong><br>";
grazie, la modifica diborgo italiae dias totalefunziona benissimo ed anzi è meglio per questione di leggibilità.Codice PHP:echo "Quantita': <strong>{$row['totale']}</strong><br>";
Per quanto riguarda:
non riesco a seguirti; che id_dipendente della tabella dipendenti è unico si, è sia chiave e sia generato automaticamente grazie alla funzionepoi, 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(auto increment), in merito al non utilizzo diCodice:AInon riesco a seguirti.Codice:GROUP BY
Cioè seguendo quanto scritto sui testi e sugli esempi, vedi link:
il GROUP BY io lo utilizzo per raggruppare secondoCodice HTML:http://www.liceofoscarini.it/didattic/data-base/sql/groupby.htmlperché 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.Codice:o.id_dipendente
Non vorrei sbagliarmi, come dicevo non sono molto ferrato, però credo che altra soluzione non ce ne sia
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
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
ciao
posta la query che funziona, potrebbe interessare anche ad altri