Pagina 1 di 2 12 UltimaUltima
Risultati da 1 a 10 di 11

Discussione: Somma righe in corrispondenza

  1. #1
    L'avatar di pup3770
    pup3770 è offline Utente del Forum
    Data Registrazione
    May 2012
    Messaggi
    46

    Somma righe in corrispondenza

    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:
    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>
    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?

  2. #2
    L'avatar di borgo italia
    borgo italia è offline Super Moderatore
    Data Registrazione
    Feb 2008
    Località
    PR
    Messaggi
    11,200
    ciao
    prova a sostituire
    SUM('quantita')
    con
    SUM(o.quantita)

  3. #3
    L'avatar di pup3770
    pup3770 è offline Utente del Forum
    Data Registrazione
    May 2012
    Messaggi
    46
    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.

  4. #4
    L'avatar di pup3770
    pup3770 è offline Utente del Forum
    Data Registrazione
    May 2012
    Messaggi
    46
    Risolto.

    Seguendo l'esempio al link precedente e seguendo anche il consiglio di
    borgo italia
    adesso funziona, come ho fatto:
    Ho sostituito la stringa:
    Codice PHP:
    echo "Quantita': <strong>{$row['quantita']}</strong><br>"
    con la stringa:
    Codice PHP:
    echo "Quantita': <strong>{$row['SUM(quantita)']}</strong><br>"
    il consiglio di
    borgo italia
    è corretto perché mettendo sia in:
    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 "
    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

  5. #5
    L'avatar di borgo italia
    borgo italia è offline Super Moderatore
    Data Registrazione
    Feb 2008
    Località
    PR
    Messaggi
    11,200
    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
    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 "
    ;
    //......
    ?>
    poi googlando ho trovato qualcosa (ma non sono sicuro)
    nel while prova a mettere (comunque prima prova cosi come l'hai fatto)
    Codice PHP:
    echo "Quantita': <strong>{$row['SUM(o.quantita)']}</strong><br>"
    oppure
    Codice PHP:
    echo "Quantita': <strong>{$row['totale']}</strong><br>"
    prova, al massimo siamo punto e a capo

  6. #6
    L'avatar di pup3770
    pup3770 è offline Utente del Forum
    Data Registrazione
    May 2012
    Messaggi
    46
    grazie
    borgo italia
    , la modifica di
    as totale
    e di
    Codice 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.

  7. #7
    L'avatar di pup3770
    pup3770 è offline Utente del Forum
    Data Registrazione
    May 2012
    Messaggi
    46
    Cioè seguendo quanto scritto sui testi e sugli esempi, vedi link:
    Codice 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

  8. #8
    L'avatar di borgo italia
    borgo italia è offline Super Moderatore
    Data Registrazione
    Feb 2008
    Località
    PR
    Messaggi
    11,200
    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

  9. #9
    L'avatar di pup3770
    pup3770 è offline Utente del Forum
    Data Registrazione
    May 2012
    Messaggi
    46
    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

  10. #10
    L'avatar di borgo italia
    borgo italia è offline Super Moderatore
    Data Registrazione
    Feb 2008
    Località
    PR
    Messaggi
    11,200
    ciao
    posta la query che funziona, potrebbe interessare anche ad altri

Pagina 1 di 2 12 UltimaUltima

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •