Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: Sommare campi db

  1. #1
    Utente di HTML.it L'avatar di bobonzo
    Registrato dal
    Jul 2000
    Messaggi
    495

    Sommare campi db

    ciao...

    avrei bisogno di sommare i campi Qta di una tabella dove il campo causale è uguale a un dato numero (1, 2, 3, 4, 5, sono in pratica le id di 5 causali diverse che si trovano in un'altra tabella) e l'id è uguale ad una variabile passata tramite form nelle stessa pagina ($_POST['id'])

    ho provato così ma non gli echo non mi visualizzano nulla

    Codice PHP:
    $sql1="SELECT SUM(qta) as scarto FROM ordini_ddt_dettaglio WHERE causale='1' AND id_prodotto=$id, SUM(qta) as saggio FROM ordini_ddt_dettaglio WHERE causale='2' AND id_prodotto=$id GROUP BY causale, SUM(qta) as contratto FROM ordini_ddt_dettaglio WHERE causale='3' AND id_prodotto=$id, SUM(qta) as omaggio FROM ordini_ddt_dettaglio WHERE causale='4' AND id_prodotto=$id, SUM(qta) as donazione FROM ordini_ddt_dettaglio WHERE causale='5' AND id_prodotto=$id";
    $result1=mysql_query($sql1) or die(mysql_error());
    $row_tut1=mysql_fetch_array($result1); 
    poi

    $scarto = $row_tut1["scarto"];
    $scarto = $row_tut1["saggio"];
    $scarto = ...ecc. per tutti i campi

    ed infine

    echo $scarto;
    echo $saggio;
    ecc.


    sbaglio qualcosa?
    grazie

  2. #2
    direi che sbagli tutto.

    Intanto dividi la query con dei return, altrimenti e' poco leggibile....

    codice:
    $sql1="SELECT SUM(qta) as scarto 
    FROM ordini_ddt_dettaglio 
    WHERE causale='1' AND id_prodotto=$id, 
    SUM(qta) as saggio 
    FROM ordini_ddt_dettaglio 
    WHERE causale='2' AND id_prodotto=$id 
    GROUP BY causale, 
    SUM(qta) as contratto 
    FROM ordini_ddt_dettaglio 
    WHERE causale='3' AND id_prodotto=$id, 
    SUM(qta) as omaggio FROM ordini_ddt_dettaglio 
    WHERE causale='4' AND id_prodotto=$id, 
    SUM(qta) as donazione FROM ordini_ddt_dettaglio 
    WHERE causale='5' AND id_prodotto=$id";
    cosa dovrebbe fare questa roba qui... ???? :master:

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Utente di HTML.it L'avatar di bobonzo
    Registrato dal
    Jul 2000
    Messaggi
    495
    hai ragione, immagino non sia propria "canonica" come query

    devo sommare il campo qta della tabella indicata solo dei record che hanno causale = a 1, 2 ecc fino a 5...e il campo id_prodotto = ad una variabile passata tramite modulo

  4. #4
    prova con:

    codice:
    select *, SUM(qta) as scarto 
    FROM ordini_ddt_dettaglio
    where causale in(1,2,3,4,5)
    and id_prodotto = '$id'
    group by causale
    prova cosi' ....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Utente di HTML.it L'avatar di bobonzo
    Registrato dal
    Jul 2000
    Messaggi
    495
    ops...

    ho dimenticato una cosa:
    l'id della causale (1, 2, 3, ecc) corrisponde ad un nome causale.
    dunque se ha causale 1 sarà scarto
    se ha causale 2 donazione ecc.

    quindi ad ogni id causale corrisponde un nome

    ecco perchè facevo

    select sum(qta) as scarto from tabella where causale='1' AND id_prodotto=$id

    e poi ripetevo

    select sum(qta) as donazione from tabella where causale='2' AND id_prodotto=$id

    ...per ogni tipo di causale

    grazie

  6. #6
    Utente di HTML.it L'avatar di bobonzo
    Registrato dal
    Jul 2000
    Messaggi
    495
    approfitto della tua pazienza per farti una domanda "strategica".

    ho realizzato un piccolo sistema per emettere fatture e ddt

    adesso vorrei gestire il magazzino

    nello specifico mi sto occupando di un magazzino di libri e mi servirebbe una pagina in grado di estrapolare grazie alle causali le quantità di libri date ai clienti come omaggio, donazione, scarto
    o altre causali.
    (ecco il senso della query sopra)

    dunque per sapere quante copie di un dato libro A sono state date come omaggio ad un cliente, apro la tabella ed estraggo tutti i record che hanno come libro=A e come causale=omaggio (in realtà avrò nel campo causale l'id e non il nome della causale)

    è corretta come logica di un magazzino?
    grazie

  7. #7
    Se ti dicessi di aver capito e dicessi "si va bene" ti direi la prima bugia delle tante che diro' nel 2007....

    La gestione di un magazzino ha ben diverse valutazioni che un paio di tabelle.... E' un classico di database che deve essere valutato per prima cosa in base al processo di lavoro a cui e' destinato.... e qui si entra in un discorso "molto" professionale. Poco esemplificabile in altre parole.

    per quanto riguarda la funzione IN() gestisce anche stringhe oltre a numeri o costanti, l'importante e' usare lo stess0 tipo se vuoi ottimizzare la query. esempio:

    where pippo IN('1', 'cinque', 'ciccio', '4')

    cioe' se passi stringhe anche i numeri devono essere passati come stringa perché sicuramente si trovano in un campo che tratta stringhe.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    Utente di HTML.it L'avatar di bobonzo
    Registrato dal
    Jul 2000
    Messaggi
    495
    Originariamente inviato da piero.mac
    prova con:

    codice:
    select *, SUM(qta) as scarto 
    FROM ordini_ddt_dettaglio
    where causale in(1,2,3,4,5)
    and id_prodotto = '$id'
    group by causale
    prova cosi' ....

    ma se io faccio così...ho un solo campo "scarto"
    io invece vorrei anche i valori per a altre causali...

    omaggio (se la causale è 2), donazione (se la causale è 3) ecc.

  9. #9
    Originariamente inviato da bobonzo
    ma se io faccio così...ho un solo campo "scarto"
    io invece vorrei anche i valori per a altre causali...

    omaggio (se la causale è 2), donazione (se la causale è 3) ecc.
    la tabella l'hai tu... ed io non ho capito che diavolo hai li dentro....

    la causale e' 2 oppure omaggio... ??? devi fare conversioni numero = qualcosa ???

    potresti usare case nel SELECT:

    CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END

    CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
    ma sinceramente parlare di cose che non ho capito mi annoia parecchio... nel senso che si perde tempo in due. O le cose sono reali oppure non pretendere di applicare delle mere ipotesi...

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10
    Utente di HTML.it L'avatar di bobonzo
    Registrato dal
    Jul 2000
    Messaggi
    495
    ok. scusa.
    ho 2 tabelle con vari campi:

    tabella ordini_ddt_dettaglio
    id_ordine | id_rif | id_prodotto | qta | causale

    tabella causali
    id_causale | nome_causale

    in concreto in contenuto della tabella causali è:
    1 | scarto
    2 | saggio
    3 | contratto
    4 | omaggio
    5 | donazione

    spiego i campi della tabella ordini_ddt_dettaglio:

    id: autoincrement e ora non ci serve
    id_rif: ora non ci serve
    id_prodotto: memorizza il codice prodotto (ad es. 98)
    qta: memorizza la quantità che di quel prodotto (98) è stata ceduta tramite DDT
    causale: memorizza l'id_causale della tabella causali che corrisponde chiaramente ad un nome_causale

    cioè quando compilo un ddt scelgo da un menu a tendina la causale con cui voglio emetterlo...ed invio il valore che è id_causale

    adesso cosa vorrei fare:

    una pagina riepilogativa dei record contenuti nella tabella ordini_ddt_dettaglio ...per un singolo prodotto.

    ho vari record in quest'ultima tabella, ad es.
    (ricordando che la struttura è...)
    tabella ordini_ddt_dettaglio
    id_ordine | id_rif | id_prodotto | qta | causale

    1 | 4 | 74 | 4 | 2

    2 | 5 | 98 | 4 | 2

    3 | 4 | 98 | 4 | 4

    3 | 4 | 51 | 4 | 4


    vorrei avere dei valori complessivi delle quantità ordinati per causale, meglio:
    se voglio avere il totale del numero dei pezzi del prodotto con codice $id_prodotto ceduti con causale "saggio" (nel campo però viene memorizzato l'id, e dunque 2)...devo fare
    Codice PHP:
    SELECT SUM(qta)
    FROM ordini_ddt_dettaglio
    WHERE id_prodotto
    ='$id_prodotto'
    AND causale='2' 
    se voglio vedere invece la causale donazione farò:
    Codice PHP:
    SELECT SUM(qta)
    FROM ordini_ddt_dettaglio
    WHERE id_prodotto
    ='$id_prodotto'
    AND causale='5' 
    e così via per le altre causali

    cioè dovrei vedere dei totali:
    per il prodotto che si chiama Carletto abbiamo:
    scarto= 5 pezzi
    saggio= 2 pezzi
    contratto= 7 pezzi

    e così via per tutte le causali

    P.S. scusa se sono stato lungo, ma ora credo di aver detto tutto
    grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.