Optimisation ?

ViPHP
ViPHP | 2291 Messages

12 nov. 2008, 13:27

Bonjour,
Je récupére des données d'une table pour les placer dans un select voici mon code
$sql = "SELECT id_module, model, emp_original, emp_exep FROM modules";
               $result = mysql_query($sql) or die ('Ne trouve pas tout les données : '.mysql_error());


	echo "<select name='mod1'>";
		while($row = mysql_fetch_array($result))
		{
		        if(($row['emp_original']) && ($row['emp_exep']=='1')){
		        echo "<option value='".$row['id_module']."'>".$row['model']." </option>\n";
		         }


		}

	echo '</select>'."\n";
	$result2 = mysql_query($sql);
	echo "<select name='mod2'>";
		while($row2 = mysql_fetch_array($result2))
		{
		        if($row2['emp_original']=='2'){
		        echo "<option value='".$row2['id_module']."'>".$row2['model']." </option>\n";
		         }


		}

	echo '</select>'."\n";
	$result3 = mysql_query($sql);
	echo "<select name='mod3'>";
		while($row3 = mysql_fetch_array($result3))
		{
		        if($row3['emp_original']=='3'){
		        echo "<option value='".$row3['id_module']."'>".$row3['model']." </option>\n";
		         }


		}

	echo '</select>'."\n";
	$result4 = mysql_query($sql);
	echo "<select name='mod4'>";
		while($row4 = mysql_fetch_array($result4))
		{
		        if($row4['emp_original']=='4'){
		        echo "<option value='".$row4['id_module']."'>".$row4['model']." </option>\n";
		         }


		}

	echo '</select>'."\n";
	$result5 = mysql_query($sql);
	echo "<select name='mod5'>";
		while($row5 = mysql_fetch_array($result5))
		{
		        if($row5['emp_original']=='5'){
		        echo "<option value='".$row5['id_module']."'>".$row5['model']." </option>\n";
		         }


		}

	echo '</select>'."\n";
	$result6 = mysql_query($sql);
	echo "<select name='mod6'>";
		while($row6 = mysql_fetch_array($result6))
		{
		        if($row6['emp_original']=='6'){
		        echo "<option value='".$row6['id_module']."'>".$row6['model']." </option>\n";
		         }


		}

	echo '</select>'."\n";
Il fonctionne parfaitement mais je ne suis pas certain que ma méthode soit la meilleur :wink:
Qui pourrais me dire si il y a moyen d'optimiser cette portion de code :?:

D'avance merci

Mammouth du PHP | 965 Messages

12 nov. 2008, 14:09

Pas testé et il ya peut être mieux mais je ferais :
<?php

// Requete SQL 
$sql    = "SELECT id_module, model, emp_original, emp_exep FROM modules";
$result = mysql_query($sql);

// Boucle affichant les 5 select 
for ($i = 1; $i <= 5; $i++) {

  echo "<select name='mod".$i."'>";
  
  while($row = mysql_fetch_array($result)) {
  
    if($row['emp_exep']== $i){
    
      echo "<option value='".$row['id_module']."'>".$row['model']." </option>\n";
    }
  }
  
  echo "</select>";
}

?>

Mammouth du PHP | 1668 Messages

12 nov. 2008, 14:52

Vois du côté de GROUP BY, c'est pratique, du moins, si MySQL le supporte...
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

ViPHP
ViPHP | 2291 Messages

12 nov. 2008, 14:59

Vois du côté de GROUP BY, c'est pratique, du moins, si MySQL le supporte...
Salut,
GROUP BY ne m'aide pas dans cette situation.
J'avais déjà essayer la solution de agité comme ceci
for ($i = 1; $i <= 6; $i++) {

  echo "<select name='sty_mod_".$i."'>";
  echo "<option value='choix'>Choix ..</option>\n";
  while($row = mysql_fetch_array($result)) {

    if(($row['emp_original']==$i) || ($row['emp_exep']==$i)){
      echo "<option value='".$row['id_module']."'>".$row['model']." </option>\n";
     }elseif
       ($row['emp_original']==$i){
    	    echo "<option value='".$row['id_module']."'>".$row['model']." </option>\n";
    	    }
  }

  echo '</select>'."\n";
Mais le soucis est que les 5 dernier select reste vide :twisted:

Mammouth du PHP | 965 Messages

12 nov. 2008, 15:49

// Boucle affichant les 5 select 
for ($i = 1; $i <= 5; $i++) {

  echo "<select name='mod".$i."'>";
  
           $result = mysql_query("SELECT id_module, model, emp_original, emp_exep FROM modules");
  while($row   = mysql_fetch_array($result)) {
  
    if($row['emp_exep']== $i){
    
      echo "<option value='".$row['id_module']."'>".$row['model']." </option>\n";
    }
  }
  
  echo "</select>";
}

ViPHP
ViPHP | 2291 Messages

12 nov. 2008, 15:59

// Boucle affichant les 5 select 
for ($i = 1; $i <= 5; $i++) {

  echo "<select name='mod".$i."'>";
  
           $result = mysql_query("SELECT id_module, model, emp_original, emp_exep FROM modules");
  while($row   = mysql_fetch_array($result)) {
  
    if($row['emp_exep']== $i){
    
      echo "<option value='".$row['id_module']."'>".$row['model']." </option>\n";
    }
  }
  
  echo "</select>";
}
Oui effectivement avec une petite modif ta solution fonctionne
for ($i = 1; $i <= 6; $i++) {

  echo "<select name='mod".$i."'>";

           $result = mysql_query("SELECT id_module, model, emp_original, emp_exep FROM modules");
  while($row = mysql_fetch_array($result)) {

    if(($row['emp_original']==$i) || ($row['emp_exep']==$i)){

      echo "<option value='".$row['id_module']."'>".$row['model']." </option>\n";
    }
  }

  echo "</select>";
}
Par contre en temps d'exécution cette solution est plus longue :?:
Merci

Eléphant du PHP | 377 Messages

12 nov. 2008, 20:36

// on va chercher les enregistrements
$result = mysql_query("SELECT id_module, model, emp_original, emp_exep FROM modules");
// Boucle affichant les 5 select  
for ($i = 1; $i <= 5; $i++) { 
  // remonter au debut des enregistrements
  mysql_data_seek($result, 0);
  echo "<select name='mod".$i."'>"; 
   
  while($row   = mysql_fetch_array($result)) { 
   
    if($row['emp_exep']== $i){ 
     
      echo "<option value='".$row['id_module']."'>".$row['model']." </option>\n"; 
    } 
  } 
   
  echo "</select>"; 
}
ca evite de faire 5 fois la même requete pour rien ;)
Petit scarabée deviendra grand