Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Optimisation du code [ Base de données / MySQL ] (azqsazqs)

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é 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 liste en php [ par marocmarocmaroc ] salut;j'ai un problème en php j'ai créé deux listes de selection en php la première sert à afficher les codes de la table famille.je voudrais dés que


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,655 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.