Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281

    ordinamento e visualizzazione

    Ciao a tutti

    ho una tabella con tutti gli ordini fatti dai clienti di un'azienda
    codice:
    id        cliente      importo       data
    1         ciccio       100            20060101
    2         ciccio       200            20060201
    3         pluto        150            20060115
    4         pluto        300            20060320
    5         caio         50              20060203
    6         caio         400            20060421
    Vorrei estrarre l'importo totale fatto nei mesi del 2006 (ordinatoi per mese crescente) diviso per ogni cliente e poi visualizzarli in questo modo
    codice:
               ciccio             pluto         caio
    01        100                150
    02        200                               50
    03                           300 
    04                                          400
    .
    .
    
    tot        300                450          450
    Questo è un esempio. In tabella ci saranno più ordini fatti nello stesso mese.

    La rappresentazione finale mi mette in difficoltà. Infatti se dovessi estrarre un solo clienti basta ordinare per mese e raggrupparli. Ma con tutti i clienti? Come posso visualizzarli in questo modo?

  2. #2
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281
    per un cliente posso fare:

    select anno, mese, sum(importo) as tot
    from ordini
    where cliente = 'ciccio'
    and anno = '2006'
    group by mese
    order by mese

    dove anno e mese sono sottostringhe del campo date (ahimè il campo "date" è una stringa e non lo posso cambiare )


    Non riesco a capire come estrarre tutti i totali per cliente nel dato mese

  3. #3
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281
    uppino

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Visto che il campo relativo alla data ce l'hai in formato stringa così dovrebbe andare:

    select cliente,sum(importo) from ordini
    where substring(data,5,2) = "02"
    and substring(data,1,4) = "2006"
    group by cliente;

    così ottieni l'importo totale per ciascun cliente nel mese di febbraio dell'anno 2006.
    Attenzione allo 0 prima del 2 perchè se lo ometti non ti restituisce alcun record.

    edit: ovviamente visto che data è di tipo stringa, mese e anno li puoi mettere in un'unica condizione

    select cliente,sum(importo) from ordini
    where substring(data,1,6) = "200602"
    group by cliente;

  5. #5
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281
    ti ringrazio per la risposta

    avevo uato un'altra query ma meno performante. userò la tua.

    quindi volendo estrarre tutti i mesi per tutti i clienti potro fare:

    select cliente,substring(date, 1 ,4) as anno,substring(date, 5 ,2) as mese,sum(importo) as tot
    from ordini
    where
    substring(date, 1 ,4) = "2004"
    group by cliente,mese
    order by cliente,mese asc;

    ma ora come posso visualizzare i dati in questo modo
    codice:
              ciccio             pluto         caio
    01        100                150           0  
    02        200                0             50
    03        0                  300           0 
    04        0                  0             400
    .
    .
    
    tot        300                450          450
    visto che ho i record così?
    esempio:
    codice:
    ciccio 2004 09 400
    ciccio 2004 12 600
    pluto  2004 01 300
    pluto  2004 03 250
    pluto  2004 05 100
    caio   2004 07 900
    caio   2004 08 800

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Non credo che sia possibile ottenere una formattazione come quella che vuoi tu tramite sql. Penso che dovresti farlo tramite php.

    Anche per l'estrazione degli importi totali per ogni singolo cliente relativi a tutti i mesi dell'anno non so se si possa fare con un'unica query, soprattutto con le date in quel formato.
    La query che hai scritto tu a occhio non dovrebbe funzionare perchè non c'è nessuna clausola relativa al mese nel where.

    Magari potresti fare un ciclo con $i che vada da 1 a 12 usando la funzione str_pad per aggiungere lo 0 per i mesi minori di 10 e calcolare gli importi di ciascun mese.

    Sicuramente qualcuno saprà consigliarti meglio.

  7. #7
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281
    la query sembra funzionare, ho controllato alcuni valori a manina e sembrano esati

    magari ho avuto solo fortuna
    adesso la ricontrollo.

    la visualizzazione è un grosso problema. dovrò mettere i dati in array e farci mille operazioni sopra.

    garzie ancora

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Hai ragione, è vero che il mese l'hai definito in fase di select.
    Per la visualizzazione tramite php dovresti cavartela facilmente.

  9. #9
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281
    Originariamente inviato da nicola75ss
    Hai ragione, è vero che il mese l'hai definito in fase di select.
    Per la visualizzazione tramite php dovresti cavartela facilmente.

    micca tanto facilemente

    le operazioni sono queste:
    - creare i mesi mancanti
    - settare a 0 il tot in quesi mesi
    - "dividere" i record per cliente ed "affiancarli"

  10. #10
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281
    pensando ad un ipotetico ciclo for per aggiungere i mesi mancanti e settare per essi il tot = 0, potrei fare:
    Codice PHP:
    $mm = array('01','02',.....);   //array contenente i mesi

    while{ //ciclo per fetchare i record

       
    for($i=0;$i<12;$i++){
            if(
    $row['mese'] == $mm[$i])
                 
    $arr[$i] = array($row['mese'],$row['tot']);
            }else{
                 
    $arr[$i] = array($row['mese'],0);
            }
       }
       

    ma non funziona manco per sogno. infatti l'arrray viene sovrascritto ad ogni passaggio. come posso fare?

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.