begin process at 2012 02 15 06:06:40
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

Optimisation du code


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Optimisation du code

mardi 29 avril 2008 à 14:27:30 | Optimisation du code

azqsazqs

bonjour,

j'ai un code que je trouve lent, j'aimerais l'accélérer un peu. je l'ai rétréci autant que le pouvais, mais je suis sur qu'il reste des abérations.

<?php
//affichage utilisateurs actifs
$rang = array('rang1','rang2','rang3');
foreach($rang as $rank)
{
echo "<h1>".ucfirst($rank)."</h1>\r";
    echo "<table>\r";
    //ligne de tete
    echo "<tr>\r";
    mysql_connect("$server", "$login","$pass") or die(mysql_error());
    mysql_select_db("$database")  or die(mysql_error());
    $resQuery = mysql_query("SELECT * FROM users WHERE etat_compte='$rank'") or die(mysql_error());
    $fields = mysql_num_fields($resQuery);
    mysql_close();
    $i = 0;
    $liste_champs = NULL;
    while ($i < $fields)
    {
        $nom_champs = mysql_field_name($resQuery, $i);
        $nom_ch[$i] = $nom_champs;
        echo "<td>".$nom_champs."</td>\r";
        $liste_champs .= $nom_champs;
        if($i != $fields-1)
        {
        $liste_champs .= ';';
        }
        $i++;
    }
    echo "</tr>\r";
    $liste_champs = explode(";",$liste_champs);
   
    //les inscrits
    echo "<tr>\r";
    mysql_connect("$server", "$login","$pass") or die(mysql_error());
    mysql_select_db("$database")  or die(mysql_error());
    $resQuery = mysql_query("SELECT * FROM users WHERE etat_compte='$rank'") or die(mysql_error());
    $fields = mysql_num_fields($resQuery);
    mysql_close();
    while ($donnees = mysql_fetch_array($resQuery))
    {
        foreach($liste_champs as $champs)
        {
            echo "<td>".$donnees[$champs]."</td>";
        }
    }
    echo "</tr>\r";
    echo "</table>\r";
}
?>

comment améliorer ce code
mardi 29 avril 2008 à 15:18:21 | Re : Optimisation du code

azqsazqs

comme toujours j'oublie l'essentiel:

ce code à pour but de faire un tableau différent pour chaque valeur du champ etat_compte seulement si au moins une ligne de la table à cette valeur.

merci
mardi 29 avril 2008 à 15:46:56 | Re : Optimisation du code

Teclis01



  $resQuery = mysql_query("SELECT * FROM users WHERE etat_compte='$rank'") or die(mysql_error());
  $resQuery = mysql_query("SELECT * FROM users WHERE etat_compte IN(".explode(',',$rang).')') or die(mysql_error());
 
Sépare mécanique et affichage...

Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

 Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro

mardi 29 avril 2008 à 15:49:25 | Re : Optimisation du code

azqsazqs

tu peux me donner la conséquence exact de cette requete car ya un bout que je comprend pas.
mardi 29 avril 2008 à 16:53:43 | Re : Optimisation du code

Teclis01

ca ne fait plus n requetes correspondant au nombre d itération du foreach

Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

 Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro

mardi 29 avril 2008 à 17:00:39 | Re : Optimisation du code

azqsazqs

donc si je fait la requete directement dans un while, il me fera autant de tableau différent que de valeur de etat_compte différent ?

si oui, affiche t'il une ligne en-tete à chaque tableau

----------------------------------------------------------------------------
Il y a 10 types de personnes dans le monde, ceux qui comprennet le binaire et les autres.

mardi 29 avril 2008 à 17:15:44 | Re : Optimisation du code

Teclis01

le but est de faire 1 requete... dans n fois la loop du while ...

Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

 Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro

mardi 29 avril 2008 à 18:52:47 | Re : Optimisation du code

azqsazqs

je suis largué, j'ai mis:

<?php
    echo "<table>\r";
    $rang = array('admin','actif','en attente');
    mysql_connect("$server", "$login","$pass") or die(mysql_error());
    mysql_select_db("$database")  or die(mysql_error());
    $resQuery = mysql_query("SELECT * FROM users WHERE etat_compte IN(".explode(',',$rang).')') or die(mysql_error());
    $fields = mysql_num_fields($resQuery);
    mysql_close();
    while ($donnees = mysql_fetch_array($resQuery))
    {
        echo "<tr>\r";
        foreach($liste_champs as $champs)
        {
            echo "<td>".$donnees[$champs]."</td>";
        }
        echo "</tr>\r";
    }
   
    echo "</table>\r";
?>

mais ca bug et je vois pas comment résoudre le probleme

----------------------------------------------------------------------------
Il y a 10 types de personnes dans le monde, ceux qui comprennet le binaire et les autres.

mardi 29 avril 2008 à 19:27:44 | Re : Optimisation du code

malalam

Administrateur CodeS-SourceS
Hello,

tu m'étonnes...c'est pas explode(), mais implode().
Ceci dit, à bencher, car IN est très lent...
mardi 29 avril 2008 à 20:31:40 | Re : Optimisation du code

gibozsec

Malalam>

Utiliser 'champ LIKE valeur1 OR champ LIKE valeur2 OR champ LIKE valeur3...'   est plus rapide que 'champ IN (valeur1,valeur2,valeur3)' ?

C'est pour n'importe quelle requête ou ça dépend du nombre de valeurs ?

azqsazqs> Tu peux mettre les connexions à la db en debut de fichier plutot que te connecter/deconnecter à chaque requête.

Tu fais des requetes pour le nom des champs en récupérant toute une liste d'enregistrements, tu peux utiliser "SHOW COLUMNS" à la place si tu utilise mysql(http://dev.mysql.com/doc/refman/5.0/fr/show-columns.html).



Grrrrrrrrrrr

1 2

Cette discussion est classée dans : mysql, champs, error, echo, die


Répondre à ce message

Sujets en rapport avec ce message

probleme base de donnée mysql [ par morgandetoi06 ] voila j ai une page qui reçoit des variables et qui doit les inserer dans une table "informations" de la base "cv"mais ça me dit "querry failed" je ne qqun peut regarder mon code ? [ par Teclis01 ] voil¨¤ en fait je cherche a calculer le tps total des appels de clients le probleme c est kil ne me fait que 1 appel par ligne et je comprends pas tro Tableau dynamique [ par kenny18 ] salut à tous,l'autre jour, j'ai demandé comment n'affiché que le champs renseignés de ma tabledans un tableau dynamique. Mathis49 m'a répondu ça :$req checkbox + tableau + popup [ par Diafwl1 ] Bonjour, J'affiche dans un popup un tableau contenant toutes les informations d'une table et je place sur chaque ligne une checkbox qui servira à choi Script qui tourne pas rond [ Double insertion dans bdd ] [ par gregorybts ] Bonsoir,cela fait 2 jours que je planche sur un problème et je ne m'en sors pas alors je viens chercher de l'aide.En fait, j'ai fais une sorte de mess insertion dans la base mysql [ par ikramta ] salut tout le mande.je veut inserer ces informations dans la base mais l'orsque je clique le bouton rien ne m'affiche.qui peut me dire ou est le defau problème concaténation [ par morpheus22170 ] Bonjour,comme le titre l'indique j'ai un problème de concaténation. Je suis sur une base de données de type "bibliothèque"Mon problème vient de l'inse SQL syntax error [ par aeilita ] bonjour , J'ai une erreur qui apparait que je ne comprend pas car mon code est correct :$nombreDeMessagesParPage = 5;$retour = mysql_query("SELECT CO liste déroulante en php [ par marocmarocmaroc ] Salut;s'il vous plait je veux savoir comment récuperer un champ selon un code sélectionné de la liste déroulante sans cliquer sur le bouton en php voi Formulaire avec un nombre de champs variable [ par nlsitdeo ] Bonjour à tous, J'ai un formulaire de commande, les produits disponibles sont extraits d'une table MySQL produits et ne sont pas toujours les mêmes (


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,264 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales