Mammouth du PHP |
571 Messages
02 oct. 2014, 12:22
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.