[RESOLU] affichage d'une requete sql / php

Eléphanteau du PHP | 20 Messages

02 oct. 2014, 12:20

Bonjour Yann,
Encore Merci.

Je bloque avec la date
je souhaite qu'il m'affiche uniquement le jour exemple 01 et non sous le format 2014-09-01.
La fonction Date que j'utlise m'affiche automatiquement la date du jour.
function changedateusfr($dateus) 
{ 
$datefr=$dateus{8}.$dateus{9}."-".$dateus{5}.$dateus{6}."-".$dateus{0}.$dateus{1}.$dateus{2}.$dateus{3}; 
return $datefr; 
}
$date=changedateusfr($date); 
Comment on peut faire et à quel niveau du programme je dois l'intégrer.

Et pour finir est ce possible pour chaque colonne nbRepas j'ai une ligne qui fait la somme de tous les nbRepas par TypeRepas du jour
Merci infiniment..

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.

Eléphanteau du PHP | 20 Messages

02 oct. 2014, 12:55

Merci encore , je regardertout cela tranquillement.
En réalité je travaille sur quelque chose d'existant, des structures de tables qui me laissent ^pas forcement des possibilités et je suis obligé de m'adapter à cela.
mais ça avance et bcp grâce à toi ;)

Eléphanteau du PHP | 20 Messages

03 oct. 2014, 10:50

Yann,
pour la somme des nbRepas, il ne m’affiche rien.
$val n'est pas déclaré.
Pourquoi on ne passe pas par une requete sql du genre SUM(nbRepas) as somme.
merci pour ton aide..

Mammouth du PHP | 571 Messages

03 oct. 2014, 12:17

$val n'est pas déclaré.
il faut procéder au débogage du tableau $cellule question de voir ce qu'il contient.

//à insérer juste après la table html(echo '</table>'
var_dump($cellule);//que retourne-t-elle?
pour ce qui est de la fonction sum() de mysql il était possible de l'utiliser mais vu l'affichage auquel tu souhaites aboutir ça risque de compliquer l'affichage du nb de repas par jour surtout que la conception de ta table pose problème.

Eléphanteau du PHP | 20 Messages

03 oct. 2014, 12:51

Merci Yann, je ferai ça ce we.

Eléphanteau du PHP | 20 Messages

05 oct. 2014, 15:08

Bonjour Yann,
il me retourne
array(0) { }

et le programme ne fonctionne pas bien
Je t'ai mis en image la présentation de ma table.
Chaque typeRepas a son nbRepas par jour.
il y a 6 types repas ( Etudiant, Professeur, lycéen etc..) ce n'est pas le souci pour faire le lien entre le typeRepas et son numero, j'arrice par un if ( typeRepas=='1') alors var1=Professeur etc..


Le code précédent fonctionne alors que le code de ton dernier post il y a un souci...
c'est juste sur la somme par jour de tous les typesRepas où je bloque..
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

05 oct. 2014, 15:29

salut,

la somme de tous les repas par jour
select sum(nbrepas),date from caresto group by date

la somme des repas par type de repas

select sump(nbrepas), typeRepas from caresto group by typeRepas

Pour info tu ne devrais pas utiliser les mots sql comme date pour nommer une colonne cela peux t'être préjudiciable (a un moment ou un autre cela va t’emmerder). Il est toujours plus pratique de nommer un champs de façon, par exemple, à ce qu'il soit unique dans le modèle.
Dans ton cas dateRepas semble indiqué.
Comme ça si tu fait un requête sur plusieurs table pas de soucis sur la sélection ou l'utilisation des champs date ;)


@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 571 Messages

05 oct. 2014, 17:37

il y a 6 types repas ( Etudiant, Professeur, lycéen etc..) ce n'est pas le souci pour faire le lien entre le typeRepas et son numero, j'arrice par un if ( typeRepas=='1') alors var1=Professeur etc..
je n'ai pas connaissance de ton code et des données manipulées.Précédemment je t'ai expliqué que pour afficher le type de repas(en lettres) tu dois pouvoir créer un tableau associatif dont les clés numériques doivent être exactement les mêmes que le type de repas(numérique) stocké en BD. Dans ce tableau chaque clé numérique sera associé à un type de repas(en lettres).
dans ta table tu as les types suivants: 5, 1, 4, 3, 11,9. donc construire un tableau de type repas revient à:
 $tabTypeRepas = array(1=>'Enseignant', 9=>'Etudiant', 4=>'Lycéen', 5=>'Elève', 3=>'Chercheur', 11=>'Autres'); 
Par contre tu as fait l'affichage de type de repas en faisant 6 testes ça doit faire beaucoup.
Il est plus pratique de stocker le type de repas(en lettre) dans une table de la BD cela rend l'application plus flexible car on peut modifier ou ajouter un type de repas sans avoir à toucher une seule ligne de code.
il me retourne
array(0) { }
A quel niveau effectues-tu ce débogage? peux tu poster ton code en intégralité?

Eléphanteau du PHP | 20 Messages

05 oct. 2014, 20:25

Merci à toi Yann pour ton aide et ta patience, j'ai réussi finalement à résoudre le souci.
et merci pour les autres.