classement apres calcul

Eléphant du PHP | 120 Messages

07 déc. 2006, 14:38

bonjour,

j'ai besoin d'afficher un classement suite à une serie de calculs entre des valeurs de champs.
Je crois que la chose à faire c'est un tableau provisoire...enfin je crois. Mais je ne sais pas comment ca fonctionne.

pour vous expliquer en vitesse, j'ai des personnes qui achetent un pass. Tous les 7 achats, ils en ont un offert.
Je voudrais afficher le classement de ceux qui en ont le plus vendus.

Pour l'instant, j'arrive à afficher la liste des personnes avec sur la meme ligne le nombre de pass vendus, le nombre de pass offerts, et le nombre de pass à vendre avant d'atteindre un nouveau pass offert.
Voila le code du tableau :
		$l_base = eco_connect();
		$requete = "SELECT * FROM 2007_ecoles ORDER BY nom_ecole";
		  
		$resultat = eco_query($l_base,$requete);
		eco_close($l_base);
		while ($enregistrement = mysql_fetch_array( $resultat ))
		{
			echo '
			  <tr>
				<td class="general"><div align="left">'.strtoupper($enregistrement['nom_ecole']).'</div></td>
			';
					// je remets le compteur à 0
					$fpc=0;
					
					$l_base1 = eco_connect();
					$requete1 = "SELECT * FROM 2007_ecoles_membres WHERE id_ecole = '$enregistrement[id]'";
					  
					$resultat1 = eco_query($l_base1,$requete1);
					eco_close($l_base1);
					while ($enregistrement1 = mysql_fetch_array( $resultat1 ))
					{
						$fpc++;
					}
			echo '
				<td><div align="center">'.$fpc.'</div></td>
				';
				// je calcule le nombre de full pass classic gagnés
				$fpc_gain = intval(abs($fpc/7));
				// je calcule la tranche de full pass classic atteinte
				$tranche_fpc = 7*$fpc_gain;
				// je calcule le nbre de full pass classic acheté en plus de la tranche
				$plus_fpc = $fpc - $tranche_fpc;
				// je calcule le nombre de full pass classic restant à acheté pour atteindre la nouvelle tranche (un offert)
				$reste_fpc = 7 - $plus_fpc;
			echo '
				<td><div align="center">'.$fpc_gain.'</div></td>
				<td><div align="center">encore '.$reste_fpc.' </div></td>
			  </tr>
		  ';
		}

La seule chose que je voudrais c'est classer ces personnes à l'affichage du tableau, du meilleur vendeur au moins bon...pour qu'ils se tirent un peu la bourre...

merci de votre aide !

jp
si tu as un soucis en informatique, dis toi bien que quelqu'un d'autre l'a eu avant toi

ViPHP
ViPHP | 1961 Messages

07 déc. 2006, 14:55

Bonjour,

Dans tes requêtes utilises la clause "ORDER BY nom_du_champ DESC".

Ça te donnera tes enregistrements classés du plus grand au plus petit.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 120 Messages

07 déc. 2006, 15:03

merci de ta reponse mais cette methode ne s'applique pas ici car le classement devrait s'appliquer sur une valeur qui n'est pas encore calculée au moment de la requete à la base de donnée...d'où mes problemes de classement justement...et mon idée d'utiliser un tableau provisoire...
si tu as un soucis en informatique, dis toi bien que quelqu'un d'autre l'a eu avant toi

ViPHP
ViPHP | 1961 Messages

07 déc. 2006, 15:16

merci de ta reponse mais cette methode ne s'applique pas ici car le classement devrait s'appliquer sur une valeur qui n'est pas encore calculée au moment de la requete à la base de donnée...d'où mes problemes de classement justement...et mon idée d'utiliser un tableau provisoire...
Dans ce cas tu devras construire ton tableau PHP, le trier et afficher tan tableau HTML après avec les valeurs du tableau PHP.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 120 Messages

07 déc. 2006, 15:43

oui voila...c'est ca que je ne sais pas faire...arg !
tu ne sais pas où je pourrais trouver un exemple ?

merci de ton aide
si tu as un soucis en informatique, dis toi bien que quelqu'un d'autre l'a eu avant toi

ViPHP
ViPHP | 1961 Messages

07 déc. 2006, 16:01

Re,

Ceci devrait pouvoir t'aider.

Si tu as des difficultés, n'hesite pas à revenir avec le nouveau code.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

Eléphant du PHP | 120 Messages

07 déc. 2006, 20:14

ok j'ai trouvé grâce à ton lien et à un peu de torturage de cerveau :

1/ attribution à la volée des valeurs dans 2 tableaux provisoires
2/ tri de ces tableaux en fonction de ma valeur de classement ($fpc)
3/ affichage HTML dans l'ordre croissant des valeurs triées

voila le code qui cette fois ci fonctionne comme je voulais :
		// indice classment
		$i=0;
		$j=0;
		
		$l_base = eco_connect();
		$requete = "SELECT * FROM 2007_ecoles ORDER BY nom_ecole";
		  
		$resultat = eco_query($l_base,$requete);
		eco_close($l_base);
		while ($enregistrement = mysql_fetch_array( $resultat ))
		{
			// je remets le compteur à 0
			$fpc=0;
			
			$l_base1 = eco_connect();
			$requete1 = "SELECT * FROM 2007_ecoles_membres WHERE id_ecole = '$enregistrement[id]'";
			  
			$resultat1 = eco_query($l_base1,$requete1);
			eco_close($l_base1);
			while ($enregistrement1 = mysql_fetch_array( $resultat1 ))
			{
				$fpc++;
			}
			// j'inscris le total des FPC vendus par cette ecole dans un tableau
			$total_fpc[$j] = $fpc;
			$ecole[$j] = $enregistrement['nom_ecole'];
			$j++;
			
		}


		// je tri le tableau dans l'ordre croissant des total_fpc
		arsort($total_fpc);
		// j'affiche ce tableau et l'ecole correspondant en fonction de l'indice
		while(list($cle, $val) = each($total_fpc))
		{
			$i++;
			echo '
				  <tr>
					<td><div align="center">'.$i.'</div></td>
					<td class="general"><div align="left">'.strtoupper($ecole[$cle]).'</div></td>
				  </tr>
			';
		}
		
MERCI !!!
si tu as un soucis en informatique, dis toi bien que quelqu'un d'autre l'a eu avant toi

ViPHP
ViPHP | 1961 Messages

07 déc. 2006, 21:01

Re,

Avec un petit [Résolu] c'est parfait!
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein