8796 sujets

Développement web côté serveur, CMS

Bonjour,
Je souhaite faire une somme dans une boucle…

$sqlCsv = SELECT tenue1_1_1, COUNT(*) AS nbre FROM fiche WHERE (idUtilisateur = 1 OR idUtilisateur = 3 OR idUtilisateur = 17) AND (`tenue1_1_1` IS NOT NULL) GROUP BY tenue1_1_1

$resCsv = mysql_query($sqlCsv);
$rowsCsv = mysql_num_rows($resCsv) or die ('Erreur SQL !<br />'.$sqlCsv.'<br />'.mysql_error());

while($dataCsv = mysql_fetch_assoc($resCsv)) {
// le pourcentage est égal au nombre divisé par la somme multiplié par 100
//$pourcentage = (($dataCsv['nbre'] / array_sum(mysql_fetch_assoc($resCsv)))*100);
}


C'est pour pouvoir afficher $pourcentage qui se trouve dans le while.

En faisant array_sum(mysql_fetch_assoc($resCsv)), ma boucle s'arrête à la première itération…

Quelqu'un aurait une idée ou une piste? Smiley sweatdrop
Modifié par speedlab (12 Oct 2010 - 22:43)
Bonjour...

Deux choses qui me paraissent importantes...

d'abord mysql_fetch_assoc($resCsv) retourne la première et seulement la première ligne de résultat.

Ensuite faudrait peut être comprendre ce que tu veux faire.. un peu plus d'explication.. Smiley smile
Parce que oui je sais lire du code, mais pour deviner exactement ce que tu veux faire on est pas devin Smiley lol
Hello,

Oui pardon, perdu dans mon code, je postais parce que j'en avais marre de tourner en boucle (huhu).
C'est la raison pour laquelle il y a une erreur: c'est while($dataCsv = mysql_fetch_array($resCsv)) que j'aurais dû écrire…

Donc, ci-dessous une explication du code:
$sqlCsv = SELECT tenue1_1_1, COUNT(*) AS nbre FROM fiche WHERE (idUtilisateur = 1 OR idUtilisateur = 3 OR idUtilisateur = 17) AND (`tenue1_1_1` IS NOT NULL) GROUP BY tenue1_1_1 

Je récupère les valeurs de tenue1_1_1 pour différents utilisateurs, ces valeurs peuvent être "1", "2", "3" ou "NULL".

Dans ma bdd, "1" correspond à "Oui", "2" correspond à "Non" et "3" correspond à "Sans objet". Une fois les valeurs ci-dessus récupérées, je souhaite en sortir un pourcentage.
Par exemple, si "Oui" est représenté 3 fois, et "Non" est représenté 1 fois: on a donc 75% de Oui et 25% de non.
C'est pourquoi on trouve en commentaire dans mon code: "le pourcentage est égal au nombre divisé par la somme multiplié par 100 ".

Pour l'exemple cité, j'ai besoin de trouver la somme (3 + 1) qui me permettra de calculer le pourcentage…

Les explications sont bien claires? Si jamais, je peux essayer d'expliquer autrement.

Merci donc pour les pistes futures Smiley lol
Modifié par speedlab (12 Oct 2010 - 01:19)
je sais pas ce que j'ai aujourd'hui mais j'arrive pas à comprendre..

bon par contre je répète encore que mysql_fetch (avec ce que tu veux derrière) ne retourne que le premier enregistrement....
Re,
Après avoir eu la tête (un peu) au calme, j'ai trouvé la solution:
	
		// 1ère requête: on calcule la somme		
		$sommeArray = array();

		while($dataCsv = mysql_fetch_array($resCsv)) {
			array_push($sommeArray,$dataCsv['nbre']); 
		}
		$somme = array_sum($sommeArray);
		
		
		// 2ème requête: on calcule le %
		$resCsv = mysql_query($sqlCsv);
		
		while($dataCsv = mysql_fetch_array($resCsv)) {

		// le pourcentage est égal au nombre divisé par la somme multiplié par 100
		$pourcentage = (($dataCsv['nbre'] / $somme)*100);
		
		} // fin while($dataCsv = mysql_fetch_array($resCsv) {


Il suffisait de faire un array_push pour construire mon tableau, puis array_sum pour additionner toutes les valeurs Smiley cligne
Modifié par speedlab (12 Oct 2010 - 22:43)
Je vois pas trop pourquoi tu t'embètes avec un array et un array_sum à la fin. Tu peux directement additionner tes valeurs dans une variable.



        $res = 0; 
 
        while($dataCsv = mysql_fetch_array($resCsv)) { 
            $res += $dataCsv['nbre'];
        } 
        echo "Le total est : ".$res;


C'est quand même plus simple non ?
Modifié par jb_gfx (17 Oct 2010 - 15:45)