• User

    Visualizza risultati raggruppati

    Buon giorno a tutti, ho un problemino da risolvere:
    ho un db mysql in cui ci sono memorizzati i dati dei dipendenti in questo modo: id_prova,data, citta, cognome,nome.
    Adesso io dovrei etrarre questi dati raggruppandoli per citta'.
    Supponiamo di avere questi dati:
    1,21/01-2009,Roma,Rossi,Mario
    2,21/01-2009,Roma,Rossi,Mario
    2,21/01-2009,Roma,Rossi,Mario
    1,21/01-2009,Roma,Verdi,Mario
    2,21/01-2009,Roma,VerdiMario
    2,21/01-2009,Roma,Verdi,Mario
    1,21/01-2009,Udine,Bianchi,Mario
    2,21/01-2009,Udine,Bianchi,Mario
    2,21/01-2009,Udine,Bianchi,Mario

    Io devo raggrupparli per citta' e per nominativo:

    Citta': ROMA
    ROSSI Mario
    prova n. 1 del 21/01/2009
    prova n. 2 del 21/01/2009
    prova n. 3 del 21/01/2009

    qui cambia cognome ma sempre nel gruppo della citta' di Roma
    VERDI Mario
    prova n. 1 del 21/01/2009
    prova n. 2 del 21/01/2009
    prova n. 3 del 21/01/2009

    qui cambia città...

    Citta': UDINE
    BIANCHI Mario
    prova n. 1 del 21/01/2009
    prova n. 2 del 21/01/2009
    prova n. 3 del 21/01/2009

    Ho provato con la funzione GROUP BY ma mi raggruppa facendomi vedere un record solo (in base ai criteri di campo)

    Attualmente per poter lavorare ho collegato la tabella ad un db access con CONNECT/ODBC e ho creato il report in access. Io però volevo farlo in php in modo da poterlo utilizzare con fpdf.

    Grazie a tutti per l'attenzione.

    Loris3000


  • ModSenior

    Ciao Loris3000,

    La prima soluzione che mi viene in mente, è ordinare in base al tuo criterio e al momento della stampa con php controlla che si sia cambiata città, se non è cambiata allora stampi di seguito.


  • User

    ...tradotto in parole povere... sto migliorando con la programmazione in php ma certe cose rimangono ancora difficili da capire al volo. Riusciresti a farmi un esempio (veloce veloce) solo per capire i meccanismi dei cicli per il cambio di intestazione?
    Grazie ancora per l'aiuto.


  • ModSenior

    Una versione semplciifcata, ovviamente devi adattarlo alle tue esigenze.
    [php]
    $tmp = '';
    while($a = mysql_fetch_array($query))
    {
    if($a['tipo] == $tmp)
    echo $a['nome'];
    else
    echo '<h1>'.$a['categoria'].'</h1>'.$a['nome'];
    $tmp = $a['tipo];
    }
    [/php]


  • User

    ...ciao a tutti... per quanto riguarda il problema del raggruppamento ho risolto (in parte) con il codice qui sotto (devo creare un pdf con fpdf):

    <?php
    define('FPDF_FONTPATH','librerie pdf/font/');
    require('librerie pdf/fpdf.php');

    class PDF extends FPDF
    {
    //Intestatazione
    function Header()
    {
    //Setto il carattere ad Arial bold 14
    $this->SetFont('Arial','BU',30);
    //Mi sposto a destra
    //$this->Cell(80);
    //Immetto il titolo
    $this->Cell(0,10,'SCHEDA DI TIRO',0,0,'C');

    //Vado a capo (Line break)
    $this->Ln(30);
    

    }

    //Piè di pagina
    function Footer()
    {
    //Mi posiziono a cm 1,5 dal fondo
    $this->SetY(-15);
    //Setto il carattere ad Arial italic 8
    $this->SetFont('Arial','I',8);
    //Numero di pagina
    $this->Cell(0,10,'Pagina '.$this->PageNo().' di {nb}',0,0,'C');
    }
    }

    //Instanciation of inherited class
    $pdf=new PDF();
    $pdf->AliasNbPages();
    $pdf->AddPage('L');

    //includo il file di connessione al db
    include("inc/config.php");

    $data = '20-01-2009';
    //creazione query di selezione dalla tabella esercitazioni
    $query1=mysql_query("SELECT * FROM esercitazioni WHERE data='$data' GROUP BY 'matricola' ORDER BY istituto,cognome,nome");
    $risultato1=mysql_fetch_array($query1);
    $righe1=mysql_num_rows($query1);

    //Inizia il primo raggruppamento: quello per il numero di matricola del dipendente
    //Inizializzo il contatore
    //$cont=0;
    while($row = mysql_fetch_array($query1))
    {
    //Scrivo i dati
    //Cognome e nome partendo da 0 e con altezza riga 10, centrato
    $pdf->SetFont('Times','B',16);
    $pdf->Cell(200,5,$row['grado'],0,0);
    $pdf->SetFont('Times','B',20);
    $pdf->Cell(150,5,$row['istituto'],0,1);
    $pdf->Ln(10);

    $pdf->SetFont('Times','B',20);

    $pdf->Cell(200,5,$row['cognome'].'   '.$row['nome'],0,0);
    $pdf->Cell(150,5,'Matricola n. '.$row['matricola'],0,1);
    
    $pdf->Ln(10);
    

    $pdf->SetFont('Times','',12);

     //Colors of frame, background and text
    $pdf->SetDrawColor(0,80,180);
       $pdf->SetFillColor(255,255,0);
    //$pdf->SetTextColor(220,50,50);
    
    //Intestazione
    //$pdf->Cell(5,8,'Nr.',1,0,'C',1);
    $pdf->Cell(25,8,'Data.',1,0,'C',1);
    $pdf->Cell(25,8,'Arma',1,0,'C',1);
    $pdf->Cell(15,8,'Distanza',1,0,'C',1);
    $pdf->Cell(40,8,'Modalità di tiro',1,0,'C',1);
    $pdf->Cell(20,8,'Sparati',1,0,'C',1);
    $pdf->Cell(20,8,'In sagoma',1,0,'C',1);
    $pdf->Cell(20,8,'% sagoma',1,0,'C',1);
    $pdf->Cell(20,8,'Centri',1,0,'C',1);
    $pdf->Cell(20,8,'% centri',1,0,'C',1);
    $pdf->Cell(40,8,'Valutazione',1,0,'C',1);
    $pdf->Cell(40,8,'Note',1,1,'C',1);
    

    $matricola=$row['matricola'];

    //creazione query di selezione dalla tabella esercitazioni
    $query2=mysql_query("SELECT * FROM esercitazioni WHERE data='$data' AND matricola='$matricola'");
    $risultato2=mysql_fetch_array($query2);
    $righe2=mysql_num_rows($query2);

    //Inizio il secondo raggruppamento
    $cont=0;
    while($row1 = mysql_fetch_array($query2))
    {

    //$pdf->Cell(5,8,$cont,1,0,'C');
    $pdf->Cell(25,8,$row1['data'],1,0,'C');
    $pdf->Cell(25,8,$row1['tipo_arma'],1,0,'C');
    $pdf->Cell(15,8,$row1['distanza'],1,0,'C');
    $pdf->Cell(40,8,$row1['modalita_tiro'],1,0,'C');
    $pdf->Cell(20,8,$row1['colpi_sparati'],1,0,'C');
    $pdf->Cell(20,8,$row1['colpi_in_sagoma'],1,0,'C');
    $pdf->Cell(20,8,number_format($row1['perc_in_sagoma'],'2', ',', '.'),1,0,'C');
    $pdf->Cell(20,8,$row1['colpi_in_centro'],1,0,'C');
    $pdf->Cell(20,8,number_format($row1['perc_in_centro'],'2', ',', '.'),1,0,'C');
    $pdf->Cell(40,8,$row1['valutazione'],1,0,'C');
    $pdf->Cell(40,8,$row1['note'],1,1,'C');
    

    //Incremento il contatore
    $cont++;
    }
    //Nuova pagina quando cambia matricola
    $pdf->AddPage('L');
    }

    $pdf->Output();
    ?>

    Mi raggruppa tutto bene e mi fa anche il salto pagina giusto, l'unica cosa che non capisco è perchè nel secondo While mi salta sempre il primo record di ogni raggruppamento... perchè... dove sbaglio?
    Grazie


  • User

    ...risolto...
    basta togliere questa istruzione:
    $risultato=mysql_fetch_array($query);
    prima di ogni ciclo While.
    Questo perchè avendo messo questa istruzione prima del ciclo while la stessa conteggiava già i record e quindi il ciclo partiva dal secondo record.
    Ciao a tutti.