IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Optimisation requete dans while imbriqué et foreach


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Par défaut Optimisation requete dans while imbriqué et foreach
    Bonjour,
    J'ai un soucis d'optimisation et de modification, à l'initial le code ressemblai à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?php
            $queryf = sql_query("SELECT name, moderator, fid FROM $table_forums WHERE type='forum'");
            while ($mod = sql_fetch_object($queryf)) {
     
                ?>
     
    <tr class="tablerow altbg2">
    <td><?php echo $mod->name ?></td>
    <td><input type="text" size="60" name="mod<?php echo $mod->fid ?>" value="<?php echo htmlspecialchars($mod->moderator) ?>" /></td>
    </tr>
     
    <?php
     
                $querys = sql_query("SELECT name, moderator, fid FROM $table_forums WHERE type='sub' AND fup='" . intval($mod->fid) . "' ORDER BY displayorder");
                while ($mod = sql_fetch_object($querys)) {
     
                    ?>
     
    <tr class="tablerow altbg2">
    <td align="right">&nbsp;&nbsp;<?php echo $mod->name ?></td>
    <td align="right">&nbsp;&nbsp;<input type="text" size="55" name="mod<?php echo $mod->fid ?>" value="<?php echo htmlspecialchars($mod->moderator) ?>" /></td>
    </tr>
     
    <?php
                }
            }
     
            ?>
    En fait le script est un forum et cette portion de code permet l'affichage:

    -De nom du forum et ses modérateurs
    -Des noms des sous-forums (du forum 'fid') et ses modérateurs

    ex:
    - Forum1 (modérateur:toto, titi, tata)
    • -Sous-forum1 (modérateur:toto, titi, tata)
    • -Sous-forum2 (modérateur:toto)

    - Forum2 (modérateur:tata)

    • -Sous-forum1 (modérateur:toto, titi, tata)
    • -etc


    Les deux requêtes se font sur la même table $table_forums

    De mon coté, je souhaite optimiser tout ça par une séparation php/html via un moteur de template et optimisation de cette boucle.

    J'ai donc fait ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
                    $mod1 = array();
                    $modforumlist = array();
                    $mod2 = array();
                    $modsubforumlist = array();
            $queryf = sql_query("SELECT name, moderator, fid 
                                                     FROM $table_forums 
                                                     WHERE type='forum'");
            while ($mod1 = sql_fetch_assoc($queryf)) {   
                     $modforumlist[] = $mod1;
     
                $querys = sql_query("SELECT name, moderator, fid 
                                                         FROM $table_forums 
                                                         WHERE type='sub' 
                                                         AND fup='" . intval($mod1['fid']) . "' 
                                                         ORDER BY displayorder");
                while ($mod2 = sql_fetch_assoc($querys)) {
                    $modsubforumlist[] = $mod2;
                }
     
            }
            /* Template initialisieren */
                    $template = load_class('Template');
                    $template->init_path(__FILE__);
     
                    $template->modforumlist = $modforumlist;
                    $template->modsubforumlist = $modsubforumlist;
                    $template->display('admin.mods.html');
    Et pour la sortie template

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                <?php foreach ($this->modforumlist as $mod1) : ?>
                <tr>
                      <td><?php echo $mod1['name'] ?></td>
                        <td><input type="text" size="60" name="mod<?php echo $mod1['fid'] ?>" value="<?php echo htmlspecialchars($mod1['moderator']) ?>" /></td>
                    </tr>
                    <?php foreach ($this->modsubforumlist as $mod2) : ?>
                    <tr class="tablerow altbg2">
                            <td align="right">&nbsp;&nbsp;<?php echo $mod2['name'] ?></td>
                            <td align="right">&nbsp;&nbsp;<input type="text" size="55" name="mod<?php echo $mod2['fid'] ?>" value="<?php echo htmlspecialchars($mod2['moderator']) ?>" /></td>
                        </tr>
                <?php endforeach ?>
            <?php endforeach ?>
    Mais ça m'a pas lair très propre , ainsi si quelqu'un a une ou des idées merci d'avance

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    ça vient de quelle lib le sql_query ?

    t'as pas PDO ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Par défaut
    Slt,

    ça vient de quelle lib le sql_query ?

    t'as pas PDO ?
    Non c'est une api propre au forum en question.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 62
    Par défaut
    ça a l'air nickel pour moi ! il y a une séparation entre la récup de données et l'affichage. Presque MVC. C'est plus facile à entretenir. C'est parfait

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Par défaut
    Slt,
    Bien en fait je viens de me rendre compte qu'il y a une erreur dans le code.

    L'affichage des sous forums ne tient pas compte de l'id du forum et tous les sous forums sont systématiquement affichés pour tous les forums alors que ce doit pas être le cas.

    - Forum1 (modérateur:toto, titi, tata)
    • -Sous-forum1 (modérateur:toto, titi, tata)
    • -Sous-forum2 (modérateur:toto)

    - Forum2 (modérateur:tata)

    • -Sous-forum1 (modérateur:toto, titi, tata)
    • -Sous-forum2 (modérateur:toto)

    Je cherche mais si quelqu'un a une idée je suis preneur

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 62
    Par défaut
    C'est clair que si tu fais pas le test sur l'id du forum dans la boucle d'affichage des sous forums t'auras ce résultat. Pourtant je vois 'fid' dans 2 requetes. ça doit être l'id du forum.

Discussions similaires

  1. Problème boucle while imbriquée dans autre boucle while
    Par nattydreadnatty dans le forum Langage
    Réponses: 3
    Dernier message: 25/08/2010, 14h58
  2. [MySQL] optimisation requete mysql - while imbriquée
    Par Sbeuh dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 19/08/2010, 00h43
  3. Optimisation requete avec select Imbriqué
    Par sintesi974 dans le forum Requêtes
    Réponses: 6
    Dernier message: 04/08/2010, 17h18
  4. optimiser une boucle while imbriquer dans une boucle for
    Par bakaratoun dans le forum MATLAB
    Réponses: 0
    Dernier message: 28/01/2010, 15h35
  5. Réponses: 2
    Dernier message: 18/09/2007, 11h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo