- Home
- Categorie
- Coding e Sistemistica
- PHP
- Visualizza risultati raggruppati
-
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,MarioIo 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/2009qui 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/2009qui 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/2009Ho 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
-
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.
-
...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.
-
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]
-
...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
-
...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.