Estrarre dati da DB AIUTO :S [Ho veramente bisogno]

Pascal Pavan

Nuovo Utente
27 Ago 2012
16
0
0
Ciao a tutti,
ho necessità di stampare una tabella riassuntiva dei periodi di vacanza dei miei dipendenti, ecco la tabella da dove devo estrarre: (VI ALLEGO UNA FOTO CHE VI MOSTRA MEGLIO LE TABELLE)
utente | periodo | anno | data prenotazione | giorniVacanza
Luca | 2013-02-04 / 2013-02-10 | 2013 | 2013-01-25 | 6
Luca | 2013-05-10 / 2013-05-20 | 2013 | 2013-02-5 | 10
Giulia | 2013-01-01 / 2013-01-06 | 2013 | 2012-12-05 | 6
Roberto| 2013-02-15 / 2013-02-16 | 2013 | 2013-02-5 | 1

Vorrei avere una tabella stampata così:
utente | periodI | giorni di vacanza
Luca | 2013-02-04 / 2013-02-10 | 6
| 2013-05-10 / 2013-05-20 | 10
-----------------------------------------------------(riga vuota o di asterischi)
Giulia | 2013-01-01 / 2013-01-06 | 6
-----------------------------------------------------
Roberto| 2013-02-15 / 2013-02-16 | 1

Praticamente vorrei che le vacanze venissero raggruppate per utente, e se un utente ha più di una vacanza, il suo nome compaia una sola volta e i periodi da lui richiesti vengano messi uno sotto l'altro.

Query di select :
select utente,periodo,anno,dataPrenotazione,giorniPresi from vacanza;

Vi prego sono abbastanza disperato, sono due settimane che ci picchio la testa e cerco soluzioni, ma niente!

Grazie
 

Allegati

  • Immagine.png
    Immagine.png
    11,2 KB · Visite: 309
ciao
ecco un esempio
PHP:
<?php
//dati connessione al db
$q=mysql_query("SELECT * FROM nome_tabella ORDER BY utente");
echo "<table>";
echo "<tr><th>utente</th><th>periodo</th><th>anno</th><th>data prenotazione</th><th>giorni vacanza</th></tr>";
while($riga=mysql_fetch_array($q)){
	$utente=$riga['utente'];
	$periodo=$riga['periodo'];
	$anno=$riga['anno'];
	$prenotazione=$riga['dataPrenotazione'];
	$giorni=$riga['giorniVacanza'];
	echo "<tr><td>$utente</td><td>$periodo</td><td>$anno</td><td>$prenotazione</td><td>$giorni</td></tr>";
}
echo "</table>";
?>
 
Intanto c'è da dire che il campo giorniVacanza è in più, perchè lo puoi ricavare facilmente dal periodo.
Vale lo stesso discorso per il campo anno.

Borgo così a prima vista non credo che il tuo codice faccia quello che ha chiesto.
Faccio qualche modifica al tuo:
PHP:
//dati connessione al db
$q=mysql_query("SELECT * FROM nome_tabella ORDER BY utente");
echo "<table>";
echo "<tr><th>utente</th><th>periodo</th><th>anno</th><th>data prenotazione</th><th>giorni vacanza</th></tr>";
$utente="";
while($riga=mysql_fetch_array($q)){
    if($riga['utente']==$utente)
        echo "<tr><td> </td><td>$riga['periodo']</td><td> </td><td> </td><td> </td></tr>"; //ho mantenuto la stessa formattazione della riga della tabella
    else{
        $utente=$riga['utente'];
        echo "<tr><td>$utente</td><td>$riga['periodo']</td><td>$riga['anno']</td><td>$riga['dataPrenotazione']</td><td>$riga['giorniVacanza']</td></tr>";
    }
}
echo "</table>";
?>
Prova un po'.
 
ciao
ecco un esempio
PHP:
<?php
//dati connessione al db
$q=mysql_query("SELECT * FROM nome_tabella ORDER BY utente");
echo "<table>";
echo "<tr><th>utente</th><th>periodo</th><th>anno</th><th>data prenotazione</th><th>giorni vacanza</th></tr>";
while($riga=mysql_fetch_array($q)){
	$utente=$riga['utente'];
	$periodo=$riga['periodo'];
	$anno=$riga['anno'];
	$prenotazione=$riga['dataPrenotazione'];
	$giorni=$riga['giorniVacanza'];
	echo "<tr><td>$utente</td><td>$periodo</td><td>$anno</td><td>$prenotazione</td><td>$giorni</td></tr>";
}
echo "</table>";
?>
Ma così mi stampa tutti i nomi, io vorrei che se luca mi ha preso due periodi il suo nome compaia una sola volta, ma i suoi periodi escano tutti.
Il codice che mi hai dato tu stampa semplicemente tutta la tabella così com'è. TI ringrazio per aver cercato di aiutarmi, ma sapresti risolvere il problema che ti ho posto ora? Guarda lo screen shot che allego, magari è più chiaro.
Grazie ancora.
 

Allegati

  • Immagine.png
    Immagine.png
    13,8 KB · Visite: 340
Intanto c'è da dire che il campo giorniVacanza è in più, perchè lo puoi ricavare facilmente dal periodo.
Vale lo stesso discorso per il campo anno.

Borgo così a prima vista non credo che il tuo codice faccia quello che ha chiesto.
Faccio qualche modifica al tuo:
PHP:
//dati connessione al db
$q=mysql_query("SELECT * FROM nome_tabella ORDER BY utente");
echo "<table>";
echo "<tr><th>utente</th><th>periodo</th><th>anno</th><th>data prenotazione</th><th>giorni vacanza</th></tr>";
$utente="";
while($riga=mysql_fetch_array($q)){
    if($riga['utente']==$utente)
        echo "<tr><td> </td><td>$riga['periodo']</td><td> </td><td> </td><td> </td></tr>"; //ho mantenuto la stessa formattazione della riga della tabella
    else{
        $utente=$riga['utente'];
        echo "<tr><td>$utente</td><td>$riga['periodo']</td><td>$riga['anno']</td><td>$riga['dataPrenotazione']</td><td>$riga['giorniVacanza']</td></tr>";
    }
}
echo "</table>";
?>
Prova un po'.

Wow! Essattamente quello che volevo, grazie mille!
 
ciao
si in effetti ho semplificato troppo nell'esempio.
un piccolo consiglio per poi facilitarti le cose
1) secondo me ti converrebbe dividere in due campi il periodo con campo periodo_ini e periodo_fine
2) al prosto della data scritta in formato umane e italiano userei il ytimestamp uniz
questo poi ti facilita sia quanto ha detto longo per il calcolo ma es. anche l'ordinamento per data

tanto poi quando li visualizzi e stamp il record l stampi come vuoi tu
 
Scusate l'intrusione, anche cosi andrebbe bene. Ciao :)
PHP:
$query = 'SELECT * FROM vacanza ORDER BY utente ASC';

$result = mysql_query( $query );

if( $result && mysql_num_rows( $result ) > 0 ):
	
	echo '<table>';
	echo "<tr><td>utente</td><td>periodo</td><td>anno</td><td>prenotazione</td><td>giorni</td></tr>"; 
	
	while ( $obj = mysql_fetch_object( $result ) ):

		echo '<tr><td>';
		echo ! isset( $utente ) ? $obj -> utente : $utente != $obj -> utente ? $obj -> utente : NULL;
		echo '</td><td>'.$obj -> periodo.'</td><td>'.$obj -> anno.'</td><td>'.$obj -> prenotazione.'</td><td>'.$obj -> giorni.'</td></tr>'; 
		
		$utente = $obj -> utente;
		
	endwhile;
	
	echo '</table>';
	
else:
	
	echo '<p>Tabella Vuota</p>';
	
endif;
 
Ultima modifica:

Discussioni simili