comment optimiser mon code


sff
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 336
Inscription: 2 Fév 2005

comment optimiser mon code

Message le Lun Juil 27, 2009 10:48

Bonjour, je souhaiterais optimiser mon code php, et éviter si possible d'exécuter une requête sql à chaque boucle.

Pouvez-vous me dire comment je peux faire ?

Merci

Code: Tout sélectionner
function bag($i1, $i2, $type) {// Affichage du sac.
   
   switch ($type) {
   case 1: $type_text ='à équipements'; break;
   case 2: $type_text ='à objets'; break;
   case 3: $type_text ='à matériaux'; break;
   case 4: $type_text ='à potions'; break;
   }

   $page = '<select name="slot"><option value="0">Vos poches '.$type_text.'</option>';

   for ($i=$i1; $i<=$i2; $i++)
   {
      
      if (is_numeric($userrow['bag'.$i.'id']) AND $userrow['bag'.$i.'id'] !=0) {
         
         $item = $mysql->query("SELECT name FROM ".$mysql->pref."_items WHERE id='".$userrow['bag'.$i.'id']."' LIMIT 1");
         $item = mysql_fetch_assoc($item);   
         
         $page .='<option value="'.$i.'">Poche '.$i.' du sac à dos : '.$item['name'].'</option>';

      }elseif(!is_numeric($userrow['bag'.$i.'id'])) {
         
         $id_equip = explode(',',$userrow['bag'.$i.'id']);   
         
         $equip = $mysql->query("SELECT name FROM ".$mysql->pref."_equips WHERE id='".$id_equip[0]."' LIMIT 1");
         $equip = mysql_fetch_assoc($equip);
         
         $page .='<option value="'.$i.'">Poche '.$i.' du sac à dos : '.$equip['name'].'</option>';
         
      }else{ $page .='<option value="'.$i.'">Poche '.$i.' du sac à dos : Vide</option>'; }   
      
   }

   $page .='</select>';
   
   return $page;
}


petitchevalroux
WRInaute discret
WRInaute discret
 
Messages: 190
Inscription: 31 Mai 2006

Re: comment optimiser mon code

Message le Lun Juil 27, 2009 11:51

Tu peux mettre un IN ou un between $i1 $i2 et sortir tes requetes de ta boucle ... je suis pas sur que ça optimise mais au moins ça fait 3 requetes vs ($i2 - $i1) ;)


sff
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 336
Inscription: 2 Fév 2005

Re: comment optimiser mon code

Message le Mer Juil 29, 2009 14:27

Je comprends pas trop ce que tu veux dire.

Il y a pas moyen d'éviter de tester pour chaque boucle ?


petitchevalroux
WRInaute discret
WRInaute discret
 
Messages: 190
Inscription: 31 Mai 2006

Re: comment optimiser mon code

Message le Mer Juil 29, 2009 15:03

ben en faite en relisant ton code vite fait je vois pas d'ou vient la variable userrow mais bon le principe du in/between c'est plutôt que de de faire ta boucle sur tes requêtes tu fais un (ou plusieurs select) en dehors du genre :
Code: Tout sélectionner
SELECT CHAMPS ... FROM TABLE WHERE ID IN (1,2,3,4,5,6)


Ou ALORS
Code: Tout sélectionner
SELECT CHAMPS ... FROM TABLE WHERE ID BETWEEN 1 AND 6


En une fois que tu as toutes tes données tu fais ta boucle avec tous tes tests en php ce qui évite d'avoir 50000 requetes ... mais qui peut poser des problème si il y a trop de données a traiter (depassement de mémoire).

C'est plus clair ? (Attention ça va pas dire que ma prochaine réponse sera un bout de code avec la solution)


sff
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 336
Inscription: 2 Fév 2005

Re: comment optimiser mon code

Message le Jeu Juil 30, 2009 0:26

Non moi je demande pas qu'on me ponde la solution, mais juste une explication comme tu l'a très bien fait et je t'en remercie.

Je viens d'essayer ta solution, mais dès le début, je vois que c'est pas possible sachant que $userrow['bag'.$i.'id'] peux très bien etre un chiffre sans virgule ou avec virgule.


psykoko
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 297
Inscription: 3 Juin 2005

Re: comment optimiser mon code

Message le Jeu Juil 30, 2009 10:34

Explique moi ton modèle de données et ce que tu veux faire précisément : parce que là t'es en train de nous dire que tes id peuvent être alphanumérique??


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité