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 :

Lister un nombre de résultats par récurrence [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut Lister un nombre de résultats par récurrence
    Salut à tous,

    J'ai un script qui gère entre autres des catégories. On a donc des dossiers, des sous-dossiers, des sous-sous dossiers...
    Dans ma table ils sont référencés par id et refid.
    id est l'auto incrément unique dans ma table et refid indique l'id du dossier parent.

    Ce que je cherche c'est au départ, pour le(s) premier(s) dossier(s), indiquer le nombre de sous dossiers. Donc la méthode c'est de lister les sous-dossiers, puis par récurrence relister ces sous-dossiers.

    Voila ma fonction:
    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
    function count($id=false, $i=0, $total=0) {
      if ($id)
      {
       $n = 'query'.$i; // nom de la requête
       $$n = mysql_query("SELECT id FROM filemanager_cats WHERE refid = '".$id."'") or die ($this->debug()); // sélection de l'id des sous-dossiers
       while (list($id) = mysql_fetch_array($$n)) {
        $total++; // tant qu'il y a un résulant, on incrémente le total
        $i++; // et le nom de la requête
        $this->count($id, $i, $total); // on relance pour vérifier l'existance d'éventuels sous dossiers.
       }
       return $total;
     
      /* Ce qui suit est négligeable */
      } else {
       $query = mysql_query("SELECT id FROM filemanager_cats") or die ($this->debug());
       echo _TEXT_DIR_.": ".mysql_num_rows($query)."<br />";
      }
     }
    Comme je relance la fonction, je me suis dit qu'il était mieux de changer le nom de la requête, et pareil pour le total, le retransmettre à chaque fois. Finalement çe ne fonctionne pas; il m'indique le nombre de sous-dossiers qui se trouve strictement dans le dossier initial.

    J'espère avoir été clair, si quelqu'un voit le problème...
    Merci

  2. #2
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 563
    Points : 2 390
    Points
    2 390
    Par défaut
    Normal, tu ré-apelles ta fonction récurcivement mais tu ne fait rien du résultat !

    tu a juste a ajouter $total += devant l'appel recurcif :

    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
    function count($id=false, $i=0, $total=0) {
      if ($id)
      {
       $n = 'query'.$i; // nom de la requête
       $$n = mysql_query("SELECT id FROM filemanager_cats WHERE refid = '".$id."'") or die ($this->debug()); // sélection de l'id des sous-dossiers
       while (list($id) = mysql_fetch_array($$n)) {
        $total++; // tant qu'il y a un résulant, on incrémente le total
        $i++; // et le nom de la requête
        $total += $this->count($id, $i, $total); // on relance pour vérifier l'existance d'éventuels sous dossiers.
       }
       return $total;
     
      /* Ce qui suit est négligeable */
      } else {
       $query = mysql_query("SELECT id FROM filemanager_cats") or die ($this->debug());
       echo _TEXT_DIR_.": ".mysql_num_rows($query)."<br />";
      }
     }
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  3. #3
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Je n'ai pas compris ce que tu cherches à faire
    Si par exemple tu as ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    + A
    |  + B
    |  + C
    |  |  + D
    |  |  ` E
    |  ` F
    + G
    ` H
       + I
       |  ` J
       ` K
    Qu'est ce que tu veux obtenir ?
    count(A) == 5 ? 3 ?

    Si c'est 5 =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function count($id) {
       $total = 0;
       $req = mysql_query("SELECT * FROM matable WHERE refid = ". $id);
       while($data = mysql_fetch_array($req)) {
          $total += 1 + count($data['id']);
       }
       return $total;
    }
    Si c'est trois alors il suffit de supprimer l'appel récusrisf du code précédent.

  4. #4
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Ah dommage j'aurai pu trouver...

    Merci beaucoup en tout cas ça fonctionne

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête compter le nombre de résultats par tranche de 5mn
    Par Sethenssen dans le forum Requêtes
    Réponses: 9
    Dernier message: 20/01/2014, 15h15
  2. nombre de résultats par pages
    Par nal dans le forum Langage
    Réponses: 14
    Dernier message: 03/05/2012, 17h38
  3. Réponses: 2
    Dernier message: 14/06/2011, 16h07
  4. [SQL] Je souhaite limiter le nombre de résultat par page
    Par kilian67 dans le forum PHP & Base de données
    Réponses: 38
    Dernier message: 20/08/2007, 17h55
  5. [SQL] Nombre de résultats par pays
    Par flOZ dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 31/05/2006, 05h29

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