concernant le formatage de la date, mysql dispose d'une fonction de formatage DATE_FORMAT().
Pour ce qui est du typeRepas, tu as la possibilité de créer un tableau associatif dont chaque valeur (type de repas en lettre) est associé à une clé numérique(
exemple: [1=>'enseignant'] ):
//il faut remplir ton tableau avec tous les types de repas présents dans la bd
$tabTypeRepas = array(1=>'Enseignant', 2=>'Etudiant', 3=>'Autre');
//pour récuperer le typeRepas correspondant à 1
echo $tabTypeRepas[1]; //Enseignant
ton affichage devient:
$tabTypeRepas = array(1=>'Enseignant', 2=>'Etudiant');
$sql="select date_format(`date`,'%d-%m') as date,nbRepas,typeRepas from caresto where month(date)=9 ";
// Exécution de la requête
$result = mysql_query($sql);
if (!$result) {
die('Requête invalide : ' . mysql_error() );
}
$tab = array();
$tabDate = array();
$cellule = array();
while ($row = mysql_fetch_assoc($result)) {
if(!isset( $tabDate ) ) {
$tabDate[$row['date']] = $row['date'];
}
$tab[$row['typeRepas']][$row['date']] = $row['nbRepas'];
}
echo '<table><thead><tr><th></th>';
foreach( $tabDate as $date ){
echo '<th>'. $date. '</th>'; //en-tête de colonne
}
echo '</thead></tr>';
foreach( $tab as $typeRepas=>$values){
echo '<tr>
<td>'.$tabTypeRepas[$typeRepas] .'<td>'; //1ère colonne
foreach( $tabDate as $i=>$date ){
if(array_key_exists($date, $values)){
echo '<td>'.$values[$date].'</td>';
$cellule[$i][] = $values[$date]; //on sauvergarde chaque élément
}else{
echo '<td>0</td>';
}
}
echo '</tr>';
}
//création de la dernière ligne pour afficher le total de chaque colonne
echo '<tr><td>total</td>';
foreach( $cellule as $val){
echo '<td>'. array_sum( $val ).'</td>';
}
echo '</tr>';
echo '</table>';
une remarque au passage sur ton mcd, ton modèle est loin d'être bon.en effet le type de repas devrait faire l'objet d'une table à part car un restaurant peut en proposer plusieurs.Cela devrait te permettre non pas seulement à ne pas stocker un champ totalement inutile comme nbRepas, qui est une information dont on peut retrouver par déduction grâce à la fonction COUNT() de mysql, mais devrait surtout t'éviter un cas de redondance qui peut induire à des incohérences.
Après ne connaissant pas dans les détails ton système d'information je ne pourrais pas d'avantage épiloguer.
concernant le formatage de la date, mysql dispose d'une fonction de formatage DATE_FORMAT().
Pour ce qui est du typeRepas, tu as la possibilité de créer un tableau associatif dont chaque valeur (type de repas en lettre) est associé à une clé numérique([b]exemple[/b]: [1=>'enseignant'] ):
[php]
//il faut remplir ton tableau avec tous les types de repas présents dans la bd
$tabTypeRepas = array(1=>'Enseignant', 2=>'Etudiant', 3=>'Autre');
//pour récuperer le typeRepas correspondant à 1
echo $tabTypeRepas[1]; //Enseignant
[/php]
ton affichage devient:
[php]
$tabTypeRepas = array(1=>'Enseignant', 2=>'Etudiant');
$sql="select date_format(`date`,'%d-%m') as date,nbRepas,typeRepas from caresto where month(date)=9 ";
// Exécution de la requête
$result = mysql_query($sql);
if (!$result) {
die('Requête invalide : ' . mysql_error() );
}
$tab = array();
$tabDate = array();
$cellule = array();
while ($row = mysql_fetch_assoc($result)) {
if(!isset( $tabDate ) ) {
$tabDate[$row['date']] = $row['date'];
}
$tab[$row['typeRepas']][$row['date']] = $row['nbRepas'];
}
echo '<table><thead><tr><th></th>';
foreach( $tabDate as $date ){
echo '<th>'. $date. '</th>'; //en-tête de colonne
}
echo '</thead></tr>';
foreach( $tab as $typeRepas=>$values){
echo '<tr>
<td>'.$tabTypeRepas[$typeRepas] .'<td>'; //1ère colonne
foreach( $tabDate as $i=>$date ){
if(array_key_exists($date, $values)){
echo '<td>'.$values[$date].'</td>';
$cellule[$i][] = $values[$date]; //on sauvergarde chaque élément
}else{
echo '<td>0</td>';
}
}
echo '</tr>';
}
//création de la dernière ligne pour afficher le total de chaque colonne
echo '<tr><td>total</td>';
foreach( $cellule as $val){
echo '<td>'. array_sum( $val ).'</td>';
}
echo '</tr>';
echo '</table>';
[/php]
une remarque au passage sur ton mcd, ton modèle est loin d'être bon.en effet le type de repas devrait faire l'objet d'une table à part car un restaurant peut en proposer plusieurs.Cela devrait te permettre non pas seulement à ne pas stocker un champ totalement inutile comme nbRepas, qui est une information dont on peut retrouver par déduction grâce à la fonction COUNT() de mysql, mais devrait surtout t'éviter un cas de redondance qui peut induire à des incohérences.
Après ne connaissant pas dans les détails ton système d'information je ne pourrais pas d'avantage épiloguer.