Requête double en MySQL

Requête double en MySQL - PHP - Programmation

Marsh Posté le 09-12-2009 à 23:02:51    

Bonjour à vous tous!
 
Je suis webmaster d'un site de quiz et je suis en travail pour la v3.0 (www.quizcity.net), et me voila confronté a un blocage de connaissance côté MySQL. Je crois que ça peut se faire, mais Google ne me donne rien d'intéressant sur le sujet. Voici mon problème:
 
Jai une table quiz dans lesquels sont stockés mes quiz et l'affichage de la liste se fait avec la requete suivante:

Code :
  1. $req = mysql_query("SELECT * FROM sets WHERE catid = '".$_GET['catid']."' AND isopen='1' AND quizlang='".$is_lang."' ORDER BY name LIMIT ".$start.", ".$nbpp."" );


 
Et j'ai une table "statistics" où le résultat de chaque partie est enregistré. Je détermine le niveau de difficulté du quiz selon la moyenne et je vais l'afficher dans ma liste de quiz. Jusqu'ici tout va bien. Par contre, je veux offrir un tri selon la moyenne... C'est là que ça se corse...
 
Je me suis fait une fonction pour calculer la moyenne et déterminer le niveau de difficulté, et cette fonction est appelée dans mon while d'affichage:

Code :
  1. function niveau($id){
  2. $extractionStats = mysql_query("SELECT * FROM statistics WHERE setid='".$id."'" );
  3.  if( mysql_affected_rows() >= 5 ){
  4.   $total = 0;
  5.   $totalpoints = 0;
  6.   $nbsaved = 0;
  7.   while($niveau = mysql_fetch_array($extractionStats)){
  8.    $total += $niveau['score'];
  9.    $totalpoints += $niveau['totalscore'];
  10.    $nbsaved++;
  11.   }
  12.   $resultatPourcent=number_format($total/$totalpoints*100,0);
  13.   if($resultatPourcent <= 40){
  14.    echo '<font color="#C00000" size="2"><b>Très difficile</b></font>';
  15.   }
  16.   else if($resultatPourcent <= 60){
  17.    echo '<font color="#FF0000" size="2"><b>Difficile</b></font>';
  18.   }
  19.   else if($resultatPourcent <= 80){
  20.    echo '<font color="#FF8000" size="2"><b>Moyen</b></font>';
  21.   }
  22.   else if($resultatPourcent < 90){
  23.    echo '<font color="#60E000" size="2"><b>Facile</b></font>';
  24.   }
  25.   else
  26.   {
  27.    echo '<font color="#40FF00" size="2"><b>Très facile</b></font>';
  28.   }
  29.  }
  30.  else
  31. {
  32. echo '<span onmouseover="montre(\'Il faut au moins <b>5</b> résultats pour<br>déterminer le niveau de difficulté.\');" onmouseout="cache();"><font color="grey" size="2"><b>En calcul...</b></font></span>';
  33. }
  34. }


 
La moyenne est dans $resultatPourcent, et il faudrait que je puisse classer en ordre ASC de $resultatPourcent...
 
Est-ce possible en une seule requête MySQL? Si oui, comment?
 
Merci de votre précieuse aide, je ne sais plus trop où chercher...  :ange:  
 


---------------
www.failqc.com : FailBlog québécois
Reply

Marsh Posté le 09-12-2009 à 23:02:51   

Reply

Marsh Posté le 09-12-2009 à 23:51:01    

tu dois pouvoir faire qqchose du genre:

Code :
  1. SELECT sets.name, avg(score) AS moyenne
  2. FROM statistics
  3.    JOIN sets ON statistics.setid=sets.setid
  4. WHERE ...
  5. ORDER BY moyenne DESC;


Message édité par pataluc le 09-12-2009 à 23:51:31
Reply

Marsh Posté le 10-12-2009 à 07:56:42    

Fais attention aussi aux injections sql, même si sur cette requete tu crains rien à part une belle erreur.
 
Si ton $_GET['catid'] contient une quote, ta requete plante.
 
Si t'utilises pas les requetes préparées, utilise au moins mysql_real_escape_string() pour échapper chaque variable que tu injectes.

Reply

Marsh Posté le 16-12-2009 à 19:35:24    

ouais, ou bien transtype quand tu as à faire à des entiers (avec (int))

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed