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 :

[SQL] Tree : algorithme récursif


Sujet :

PHP & Base de données

  1. #1
    Fabouney
    Invité(e)
    Par défaut [SQL] Tree : algorithme récursif
    Bonjour à tous et à toute,

    J'ai une table catégories, chaque catégories peut avoir un parent et une catégorie plusieur enfants, jusque là rien de bien compliquer.

    la structure de ma table est ainsi (pour faire simple).

    ---------------
    Catégorie
    ---------------
    id
    titre
    parent_id

    exemple d'enregistrements:

    id titre parent_id
    -- --------------- ----------
    1 Catégorie 1 0
    2 Catégorie 2 1
    3 Catégorie 3 2
    4 Catégorie 4 1
    5 Catégorie 5 0

    bon but etant d'afficher ceci :

    + Catégorie 1
    + Catégorie 5

    si le mec clique sur catégorie 1 :
    - Catégorie 1
    + Catégorie 2
    Catégorie 4

    et pour finir si le mec clique sur Catégorie 2 :
    - Catégorie 1
    - Catégorie 2
    Catégorie 3
    Catégorie 4

    A la rigueur c'est pas compliqué, la ou ca se complique c'est dans le dernier cas ou le mec "depli" la catégorie 2 on affiche ses enfant, tout en gardant les enfants de la catégorie 1 (catégorie 4).

    je suis sur que vous vous dites "bah c'est tout con à faire" alors je vous dit d'essayer et de voir qu'en fait c'est peut etre pas aussi simple que ca :s

    donc je suis preuneur pour toute solution alorithmique, car techniquement j'ai pas de probleme.

    Cordialement.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Points : 44
    Points
    44
    Par défaut
    J'avais fait (enfin, "commencé") quelque chose de similaire (une TODO List avec hiérarchie en fait) ; je n'avais pas rencontré la difficulté qui te bloque (c'est-à-dire passer correctement les ids des catégories dépliées, et construire la requête SQL adéquate) car j'avais utilisé Ajax.
    En résumé, lorsque l'utilisateur cliquait sur un +, ça utilisait JavaScript + XMLHTTPRequest pour contacter une page qui renvoyait les sous-catégories de la catégorie concernée. Ce résultat était ensuite inséré (toujours par JavaScript) dans une DIV sous la catégorie. On obtenait ainsi une liste de catégories, sans limites de niveaux, pliable et dépliable à volonté

  3. #3
    Fabouney
    Invité(e)
    Par défaut
    Oui en javascript tout de suite la difficulté est moindre je suis d'accord, mais bon je voulais faire un truc accessible pour tous (ceux ayant pas javascript), vu que c'est pour un helpcenter ce serai mieux, mais bon.

    si d'autre on des idées ...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 39
    Points : 44
    Points
    44
    Par défaut
    Donc sans JavaScript, tu dois repasser à chaque fois les id des catégories à déplier, en ajoutant l'id de la catégorie supplémentaire à déplier (ce sera pour tes liens sur les "+") ou en retirant l'id de la catégorie à replier (ce sera pour tes liens sur les "-"). Je pense que tu peux t'en tirer en passant un argument genre cat=2-3-5-8-9-4, qui signifierait "déplier les catégories 2, 3, 5, 8, 9, et 4". Avec quelques fonctions pour manipuler cette liste d'id rapidement, ça devrait aller.

    Dans un premier temps, n'essaye pas d'optimiser le tout en une seule requête SQL et vas-y instinctivement : tu sélectionnes les catégories de parent_id 0. Pour chacune de ces catégories, tu appelles une fonction display_categorie qui sera récursive et effectuera un SELECT pour chaque catégorie dont l'id apparaît dans l'argument.

    Ensuite tu pourras optimiser, ça ne devrait pas être trop difficile. Mais n'oublie : « Early optimisation is the root of all evil »

  5. #5
    Fabouney
    Invité(e)
    Par défaut
    J'ai réussi à faire ce que je voulais, en passant juste le parent_id il s'en sort en pas bcp de ligne de code, je compte publié mon code quelque part, car après avoir fait quelque recherche, j'avous que y'a pas grand chose sur ce genre de script à part en N-level nested, ou la certe on gagne en requete mais c'est un peu plus long à coder et à mettre en oeuvre, quand c'est pour une petite table, comme dans mon cas.

    pour ceux que ca intérresse quand même avec n-level nasted, je les invite à lire ce tuto de phpriot(), qui est tout simplement génial.

    Voila, merci d'avoir essayer de m'aider, pour ceux que ca intérresse, PM moi, je peux rendre mon script générique en objet, si vous voulez.

    Cordialement.

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/02/2009, 20h28
  2. Algorithme récursif (Poker)
    Par MagicTux dans le forum Débuter
    Réponses: 5
    Dernier message: 31/01/2009, 14h12
  3. Script SQL selon algorithme
    Par aurelie83 dans le forum SQL
    Réponses: 13
    Dernier message: 13/05/2008, 09h34
  4. Algorithme récursif de calcul de moyenne
    Par kromartien dans le forum Mathématiques
    Réponses: 25
    Dernier message: 23/10/2007, 11h05
  5. problème algorithme récursif
    Par seb888 dans le forum Général Java
    Réponses: 11
    Dernier message: 04/06/2005, 21h35

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