begin process at 2012 05 28 08:57:14
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

comparer les valeurs affichées dans une boucle while


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

comparer les valeurs affichées dans une boucle while

jeudi 25 février 2010 à 16:39:33 | comparer les valeurs affichées dans une boucle while

miga003

Bonjour,
Nouveau venu sur ce forum, je suis confronté à une question que je ne sais résoudre :

configuration :
Je récupère les valeurs d'une table par une requête MYSQL et les affiche dans un tableau à l'aide d'une boucle while :
$req="select * from Table where id=$id";
$res= mysql_query($req) or die(mysql_error());
while($row=mysql_fetch_array($res)){
echo '<tr><td>'.$row['Annee'].'</td><td>'.$row['Mois'].</td><td>'.$row['NbDossiers'].'</td></tr>';
}
question :
mais je souhaite comparer les valeurs de chaque ligne pour (par exemple) cumuler les valeurs de NbDossiers dans un même mois d'une même année :
de façon à ce que les résultats de la requête :
2009 - 12 - 2
2009 - 12 - 4
2009 - 10 - 3
s'affichent de la façon suivante :
2009 - 12 - 6
2009 - 10 - 3

Comment faire, donc, pour comparer les valeurs de $row['Annee'] - $row['Mois'] d'une ligne à l'autre à l'intérieur de la boucle while afin d'additionner les valeurs correspondantes de $row['NbDossiers'] ?
Suis-je clair ?
je pensais passer par une boucle for et indexer les variables avec [$i], mais je suis un peu perdu dans cette hypothèse.
Je me dis que les conseils éclairés d'un expert pourraient me faire apprendre à mieux utiliser php tout en gagnant du temps...
Merci de votre aide.
vendredi 26 février 2010 à 01:30:14 | Re : comparer les valeurs affichées dans une boucle while

gibozsec

Réponse acceptée !
Bonjour,

Une première chose avant de te répondre : éviter les "or die()". Si ta connexion à la DB n'est pas possible, si la requête plante ou n'importe quel autre problème affiche un message d'erreur dans une page normale ou redirige le visiteur ou fait autre chose mais n'utilise pas die().

Concernant ton problème tu peux faire plusieurs choses. Première solution, tu enregistre la date "en cours" dans ta boucle et en fonction du fait qu'elle ait changé ou non, tu calcule ou tu affiche.
<?php


$annee = '';
$mois = '';
$dossiers = 0;

while($row=mysql_fetch_array($res)){
//Si on a changé de date, on affiche la date précédente
//$annee != '' permet de ne pas afficher au 1er tour de boucle
if(($row['Annee'] != $annee || $row['Mois'] != $mois) && $annee != ''){
//On a changé de mois, on affiche le précédent
echo '<tr><td>'.$annee.'</td><td>'.$mois.</td><td>'.$dossiers.'</td></tr>;
//Réinitialisation du nombre de dossiers
$dossiers = 0;
}
//Ajout des dossiers de ce tour de boucle
$dossiers += $row['NbDossiers'];

//Mise à jour du mois et de l'année
$annee = $row['Annee'];
$mois = $row['Mois'];
}
//A la fin de la boucle il reste un mois à afficher
echo '<tr><td>'.$annee.'</td><td>'.$mois.</td><td>'.$dossiers.'</td></tr>;

?>


La seconde solution (que je préfère pour raison personnelles) est de faire deux boucles : une pour créer un tableau auto-indexé, une pour l'affichage :

<?php
$data = array();
while($row=mysql_fetch_array($res)){
if(!isset($data[$row['Mois'].'-'$row['Annee']])){
$data[$row['Mois'].'-'$row['Annee']] = $row['NbDossiers'];
}
else{
$data[$row['Mois'].'-'$row['Annee']] += $row['NbDossiers'];
}
}
foreach($data as $k=>$dossiers){
list($mois, $annee) = explode('-',$k);
echo '<tr><td>'.$annee.'</td><td>'.$mois.</td><td>'.$dossiers.'</td></tr>;
}

?>

(je n'ai pas testé le code mais l'idée est là)


En espérant t'avoir aidé.
Grrrrrrrrrrr
vendredi 26 février 2010 à 16:37:35 | Re : comparer les valeurs affichées dans une boucle while

miga003

Merci pour ta réponse;
je suis toujours agréablement surpris par l'esprit collaboratif et solidaire des forums. Si c'était tout le temps comme ça !
Je vais tester les solutions que tu me proposes et reviens vite te dire le résultat.
Merci encore.
Grrrrrr (?)
samedi 27 février 2010 à 12:39:49 | Re : comparer les valeurs affichées dans une boucle while

kohntark

Membre Club
Salut,

Ca me parait complexe tout ça.

Une date se stocke dans un champ date, pas, comme tu sembles le faire, dans plusieurs (Mois, Année) champs d'un autre type.
Cela relève bien sur de ton contexte, que je ne connais pas, mais, même si à l'instant présent tu n'as pas besoin d'une date complète (entends par là jour/mois/année) je reste persuadé qu'un type date serait plus approprié.

Par exemple :
Code PHP :
$sql = "
SELECT LEFT(champ_date, 4) AS Y, 
SUBSTRING(champ_date,6,2) AS M,
SUM(NbDossiers) AS tot
FROM Table
GROUP BY LEFT(champ_date,7)";

$res = $dbh->query($sql); // suppose une utilisation de PDO

echo '<table>';
foreach($res as $v) {
    echo '<tr><td>'.$v['Y'].'</td><td>'.$v['M'].'</td><td>'.$v['tot'].'</td></tr>';
}
echo '</table>';


Je trouve cela plus clair et c'est sans doute bien plus rapide (même si ça pourrait être optimisé).


Cordialement,



Kohntark -

samedi 27 février 2010 à 12:54:11 | Re : comparer les valeurs affichées dans une boucle while

miga003

bonjour,
j'ai utilisé la première solution et ça fonctionne super bien.
Dès que j'ai plus de temps j'essaie la deuxième...
Merci de ton aide.

samedi 27 février 2010 à 12:58:42 | Re : comparer les valeurs affichées dans une boucle while

gibozsec

A ton service.

La solution avec un seul champ pour la date et un group by est pas mal aussi à condition que ce ne soit pas un problème pour toi d'enregistrer la date dans un seul champ.


Grrrrrrrrrrr
samedi 27 février 2010 à 13:01:58 | Re : comparer les valeurs affichées dans une boucle while

miga003

Salut Kohntark,
en effet le format date serait plus approprié, mais mon client a configuré sa table avec un champ Année (AAAA) et un champ Mois (MM) sous Access et l'importe dans mysql tout comme.
Par ailleurs, ta solution avec foreach me semble en effet simple et rapide. Je m'en vais l'essayer aussi histoire de parfaire ma formation php (lol)
Merci de tes remarques et propositions.
samedi 27 février 2010 à 13:21:09 | Re : comparer les valeurs affichées dans une boucle while

kohntark

Membre Club

Merci de tes remarques et propositions.


De rien
C'est toujours agréable de répondre à des questions bien posées et surtout à des personnes qui ne prennent pas les intervenants pour des cons ou des vaches à lait (ce qui repésente plus de la moitié des messages postés ici, malheureusement )

C'est un peu un message pour rien mais je tenais à le préciser

N'hésite pas à nous faire part de tes avancées ou difficultés.


Kohntark -



Cette discussion est classée dans : boucle, comparer, while, valeurs, row


Répondre à ce message

Sujets en rapport avec ce message

Concaténer les valeurs d'une boucle while [ par nougitch ] Bonjour,J'aimerais savoir quelle est la meilleure méthode pour concaténer les valeurs comprises dans une boucle while.Merci par avance.Cdt besoin d'aide, affichage d'une table dans boucle while [ par witch32 ] bonjour!alors voila mon soucis: >j'ai (imaginons) 5résultats pour une requete>je veux afficher la premiere ligne de la table> et quand je clic sur un requete sql generé dans une boucle do/while SOUCI [ par jp1871 ] Bonjour je desir generer un xml avec php mais j ai un souci car il y a deux tables et plusieurs noeuds j aimerai avoir une premiere serie de noeuds qu boucle dynamique dans un tableau [ par jasou62114 ] bonjour à tous, voilà j'ai un léger problème ce n'est peut etre rien mais ca me chiffonne, pour ne pas dire autre chose, depuis un p'tit moment.J'aime Boucle while [ par stu76 ] Bonjour,J'aimerais savoir si quelqu'un pouvait m'expliquer comment on enregistre des données qui vienne d'un formulaire dans une base de données. En g Incrémenter des nombres dans une boucle while [ par hakeem69 ] Bonjour à tous !<o:p Comment recuperer les id d une boucle while ?? [ par danaweb2008 ] Bonjour à tous ! Comment récupérer les id des lignes listée dans la page de présentation des produits pour aller ensuite sur une autre page ? J essais Boucles imbriquées [ par christobal ] Bonjour, J'aimerais afficher mon site de maniere dynamique, mais il semblerait qui faut utiliser 2 boucles imbriquées. pb je ne sais pas comment faire probleme boucle while + a href [ par suethi75 ] Bonjour,Je construis un site de bijoux. J'utilise deux formulaires. Il y a un formulaire qui possède tous les bijoux suivant des critères, ce formulai Boucle While une seule réponse [ par Const4ntine ] Bonjour,J'ai une petite erreur, ou disons que le résultat n'est pas à l'hauteur de mes espérances ;)J'ai une mauvaise connaissance des boucles while d


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,466 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales