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 :

Récursivité trop longue [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de johweb
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 342
    Par défaut Récursivité trop longue
    Bonjour à tous.

    Je gère une structure en arbre assez simplifiée. J'ai créé une table dont la structure est la suivante :
    -id : identifiant de l'enregistrement
    -nom
    -id_parent : identifiant du parent s'il y en a un (sinon, 0)

    J'ai créé une fonction récursive qui me donne tous les enfants d'un point précis de mon arbre. Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function liste_enfants($valeur){
    	GLOBAL $maliste; //initialisée dans mon code avant l'appel de cette fonction
    	$maliste.=$valeur.",";
    	$res=query("SELECT id FROM ma_table WHERE id_parent=".$valeur);
    	while($row=fetch($res)){
    		liste_enfants($row["id"]);
    	       }
    	}
    J'ai l'exemple d'un point qui a 198 enfants. Le souci est que le traitement est d'une à deux minutes pour afficher mon résultat....
    Est-ce que ma fonction (pourtant simple) est mal construite ?
    Comment arriver à mon résultat avec moins de temps de traitement ?
    Cordialement, Johweb.

  2. #2
    Membre éprouvé Avatar de julien.63
    Profil pro
    balayeur
    Inscrit en
    Décembre 2005
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : balayeur

    Informations forums :
    Inscription : Décembre 2005
    Messages : 1 348
    Par défaut
    salut,
    à mon avis c'est la requête qui ralentit.
    Est ce que ta table est très grosse. Si non, tu peux peut être chargé tout ce qui se trouve sous le parent dans un tableau et ensuite jouer avec ce tableau... suggestion...

  3. #3
    Membre chevronné Avatar de johweb
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 342
    Par défaut
    Hihi oui, ma table est... énorme ...
    En fait j'ai simplifié l'exemple pour optimiser...les réponses à ma question... Donc la solution du tableau n'est malheureusement pas envisageable...
    Mais merci quand même. ^^

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Par défaut
    Tout dépend de ce que tu appelles énorme , mais c'est sûr qu'une requête effectuée plus de 200 fois de suite sur un table "énorme" va sérieusement ralentir ton traitement.

    A la limite tu devrais aussi essayer via un tableau et comparer les temps de réponse. Tu peux peut être aussi essayer de faire un traitement sans réccursivité et comparer. Si tu obtiens toujours des temps de réponse non satisfaisant, je ne pourrai que te conseiller d'optimiser les serveurs mysql et apache, ou encore de changer d'hébergement si tu te fais hégerger ailleurs.

  5. #5
    Membre chevronné Avatar de johweb
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2003
    Messages
    342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 342
    Par défaut
    Je suis effectivement en train d'essayer de passer toutes mes valeurs en tableau avant de les traiter. Cela me faisais peur au début (au vu du nombre d'enregistrements total). La difficulté serait donc de minimiser les données dans ce tbleau avant de les traiter...
    Cela semble plus rapide car en effet, il effectuait sur l'exemple donné 200 requêtes sur une grosse table...
    Mon application est hébergée en local chez le client. A machine équivalente, je peux supposer que le résultat semblera similaire sur ma machine de test.
    Bon, je fouille, je teste, ...
    Merci !

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

Discussions similaires

  1. Ligne de code trop longue !!!
    Par botcharoff dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/09/2005, 08h59
  2. Erreur ORA-01704 : constante de chaine trop longue
    Par verrec_s dans le forum Oracle
    Réponses: 22
    Dernier message: 13/12/2004, 15h30
  3. [TP]Probleme de ligne trop longue
    Par poppels dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 24/09/2004, 06h36
  4. chaine trop longue pour envoyer en socket?
    Par jeje.r dans le forum C++Builder
    Réponses: 10
    Dernier message: 27/06/2003, 16h36

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