Page 1 sur 2
affichage d'une requete sql / php
Posté : 29 sept. 2014, 11:13
par elgringo67
Bonjour,
J'ai une table
Resto qui se présente ainsi:
idCAResto int(10) UNSIGNED Non
date date Non 0000-00-00
typeRepas int(11) Non 0
nbRepas int(11) Non 0
ma requete sql:
$sql="select distinct date,nbRepas,typeRepas from caresto where month(date)='09' ";
retourne ce résultat :
idCAResto date typeRepas nbRepas
1 2014-09-01 3 6
2 2014-09-01 4 2
3 2014-09-01 1 3
4 2014-09-01 9 1
5 2014-09-01 11 37
6 2014-09-01 5 3
7 2014-09-02 5 2
etc.....
Ma question est la suivante:
je souhaite afficher par date unique les colonnes typesRepas et NbRepas.à savoir
pour le
2014-09-01
ligne 1 ( typeRepas et nbrepas )
ligne 2 ( typerepas et nbrepas )
etc sans la répétition des dates
pour le
2014-09-02
ligne 7 ( typeRepas et nbrepas )
etc...
ainsi de suite
sans les repetitions des dates.
ça doit être au niveau du php et non de la requete sql, mais j'arrive pas.
Merci infiniment de votre aide
Re: affichage d'une requete sql / php
Posté : 29 sept. 2014, 12:23
par yann18
bonjour,
au lieu de faire 12 requêtes( correspondant aux 12 mois) comme tu le fais en ce moment.Je te propose d'en faire une seule.A partir du résultat de la requête tu dois pouvoir construire un tableau multi-dimensionnel dont clés correspondent aux années, mois.
$sql="select `date`,nbRepas,typeRepas, year(`date`) annee, month(`date`) mois from caresto order by year(`date`) , month(`date`) ";
$sth=$dbh->prepare($sql);
$sth->execute();
$tabResto = array();
while($row = $sth->fetch()){
$tabResto[$row['annee']][$row['mois']] = $row;
}
var_dump($tabResto);
//parcourir avec 2 boucles $tabResto pour afficher
Re: affichage d'une requete sql / php
Posté : 29 sept. 2014, 13:36
par elgringo67
Je te remercie pour ta reponse, mais j'ai un message d'erreur.
Fatal error: Call to a member function on a non-object in c:\program files\easyphp1-8\www\carte resto\resultat_date.php on line 34
Re: affichage d'une requete sql / php
Posté : 29 sept. 2014, 15:43
par yann18
je vois que tu n'utilises pas l'extension PDO mais le principe reste le même.
Mais on peut faire encore plus simple:
$link = mysql_connect("localhost", "user", "password")
or die("Impossible de se connecter : " . mysql_error());
$sql="select `date`,nbRepas,typeRepas from caresto order by `date` ";
// Exécution de la requête
$result = mysql_query($sql);
if (!$result) {
die('Requête invalide : ' . mysql_error() );
}
$dateCourante='';
while ($row = mysql_fetch_assoc($result)) {
//la date précédente est différente de la date en cours(date extraite de la bd) alors on affiche la date en cours
if( $dateCourante != $row['date'] ){
$dateCourante = $row['date'];
echo '<h3>'.$dateCourante.'</h3>';
}
echo $row['typeRepas'], '-', $row['nbRepas'],'<br>';
}
Re: affichage d'une requete sql / php
Posté : 30 sept. 2014, 08:35
par elgringo67
Je te remercie pour ta reponse. J avance doucement mais sûrement.
Maintenant il faut que j arrive à mettre tout cela sous forme d'un tableau.
Du genre
Un tableau pour le mois entier.
Colonne Type resto avec chaque jour son nbre Repas.
Du style . Exemple
Type Resto. Date du jour
------------- -----1/09------------2/09-----3/09 etccc
Etudiants------nbResto---nbResto-----nbResto etc..
Professeurs -----nbResto----nbResto-----nbResto
Etccc
Si tu as une idée je suis preneur .
Merci encore
Re: affichage d'une requete sql / php
Posté : 01 oct. 2014, 11:58
par yann18
On est bien loin de ta question initiale car ta dernière question n'a pas grand chose à voir avec la 1ère.Quant à la reponse à ta question, pour construire un tableau dynamique voilà comment faut s'y prendre:
$sql="select `date`,nbRepas,typeRepas, typeResto from caresto where month(date)=9 ";
$result = mysql_query($sql);
$tab = array();
$tabDate = array();
while ($row = mysql_fetch_assoc($result)) {
if(!isset( $tabDate ) ) {
$tabDate[$row['date']] = $row['date'];
}
$tab[$row['typeResto']][$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 $typeResto=>$values){
echo '<tr>
<td>'.$typeResto .'<td>'; //1ère colonne
foreach( $tabDate as $date ){
if(array_key_exists($date, $values))
echo '<td>'.$values[$date].'</td>';
else
echo '<td>0</td>';
}
echo '</tr>';
}
echo '</table>';
Re: affichage d'une requete sql / php
Posté : 01 oct. 2014, 13:07
par elgringo67
D'abord merci de m'avoir répondu et de l’intérêt que tu portes à mon problème.
Je me suis trompé dans le message precedent c'est typeRepas et non type Resto
il m'affiche donc ce message d'erreur !
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\carte resto\resultat_date1.php on line 37
Re: affichage d'une requete sql / php
Posté : 01 oct. 2014, 14:08
par yann18
avant d'exécuter la requête SQL assures que tu es connecté sur le serveur(mysql_connect()), que tu as sélectionné la bd:
$link = mysql_connect("localhost", "user", "password")
or die("Impossible de se connecter : " . mysql_error());
// Connexion à la base de données bd
$db_selected = mysql_select_db('bd', $link);
if (!$db_selected) {
die ('Impossible de sélectionner la base de données : ' . mysql_error());
}
$sql="select `date`,nbRepas,typeRepas, typeResto 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();
while ($row = mysql_fetch_assoc($result)) {
if(!isset( $tabDate ) ) {
$tabDate[$row['date']] = $row['date'];
}
$tab[$row['typeResto']][$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 $typeResto=>$values){
echo '<tr>
<td>'.$typeResto .'<td>'; //1ère colonne
foreach( $tabDate as $date ){
if(array_key_exists($date, $values))
echo '<td>'.$values[$date].'</td>';
else
echo '<td>0</td>';
}
echo '</tr>';
}
echo '</table>';
Re: affichage d'une requete sql / php
Posté : 01 oct. 2014, 14:15
par elgringo67
Je n ai pas dans ma table le champ typeResto c'est une erreur de ma part.
J arrive sans aucun souci à me connecter à ma bdd.
Les champs que j'ai dans la table caresto sont les suivants
Date
typeRepas
nbRepas
Et la date est sous la forme 2014-09-30
TypeRepas et nbRepas sont des entiers.
Re: affichage d'une requete sql / php
Posté : 01 oct. 2014, 14:34
par yann18
tu peux enlever typeResto dans la requête SQL.Dans le code tu peux remplacer typeResto par typeRepas
Re: affichage d'une requete sql / php
Posté : 01 oct. 2014, 15:46
par elgringo67
j'avais déjà fait cela ,
il m'affiche juste une colonne du champs
typeRepas
3
4
1
9
11
5
12
6
Je suis en train de verifier pk..
pour rappel
Les resultats de ma table sont sous cette forme dans la bdd
idCAResto date typeRepas nbRepas
1 2014-09-01 3 6
2 2014-09-01 4 2
3 2014-09-01 1 3
4 2014-09-01 9 1
5 2014-09-01 11 37
etc..
merci vraiment pour ta patience et ta gentillesse
Re: affichage d'une requete sql / php
Posté : 01 oct. 2014, 16:04
par yann18
je vois d'où vient l'erreur.en fait le tableau $tabDate est vide car les dates extraites de la bd ne sont jamais chargées dans ce tableau.voilà le code corrigé
$link = mysql_connect("localhost", "user", "password")
or die("Impossible de se connecter : " . mysql_error());
// Connexion à la base de données bd
$db_selected = mysql_select_db('bd', $link);
if (!$db_selected) {
die ('Impossible de sélectionner la base de données : ' . mysql_error());
}
$sql="select `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();
while ($row = mysql_fetch_assoc($result)) {
if(!isset( $tabDate[$row['date']] ) ) { //!!!!
$tabDate[$row['date']] = $row['date'];
}
$tab[$row['typeResto']][$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 $typeResto=>$values){
echo '<tr>
<td>'.$typeResto .'<td>'; //1ère colonne
foreach( $tabDate as $date ){
if(array_key_exists($date, $values))
echo '<td>'.$values[$date].'</td>';
else
echo '<td>0</td>';
}
echo '</tr>';
}
echo '</table>';
j'en suis désolé.ça doit pouvoir fonctionner maintenant
Re: affichage d'une requete sql / php
Posté : 01 oct. 2014, 16:15
par elgringo67
t'es un chef.
Je ne sais comment te remercier.
Maintenant je vais le peaufiner.
Car les typeRepas en realité c'est sous cette forme que je vais faire.
if ($typeRepas=='1')
{
$var1="Enseignant";
}
etc...
et la date je vais la faire
sous la forme de 1/09 ou lieu quelle soit entiere
merci vraiment pour tout.
si je n'arrive pas je reviendrai vers toi
Re: affichage d'une requete sql / php
Posté : 01 oct. 2014, 18:12
par elgringo67
Je bloque avec la date
car je souhaite la date sous cette forme
01-09 ou juste le date du jour.
j'ai utilisé cette fonction là
$date=date("m-d");
mais rien ne change.
sinon est -il possible de faire la somme de nbRepas par jour
exemple
colonne nbRepas par jour
rajouter une ligne en bas de chaque colonne qui me fait la somme total..3+12+126+56 = Somme Total 197
1/09
3
12
126
56
197
Merci infiniment, je profite de ta gentillesse
Re: affichage d'une requete sql / php
Posté : 01 oct. 2014, 18:23
par sirakawa