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

Requêtes MySQL Discussion :

Tri d'une arborescence.


Sujet :

Requêtes MySQL

  1. #1
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2005
    Messages : 20
    Par défaut Tri d'une arborescence.
    Bonjour,

    J'ai un problème concernant le tri d'une arborescence. Je sais, je rabache certaienement, mais je n'ai pas trouvé de sujet analogue, ni dans les FAQ du site.

    J'ai une table section composée comme suit :

    id, identifiant de la section, INT(3), AUTO_INCREMENT;
    lebel, libelle de la section;
    #id_mere, identifiant de la section mère, présente dans la table.

    Si une section n'a pas de mère, alors id_mere est à 0.

    En gros, mes données s'organisent comme suit :
    1 / Sec 1 / 0
    2 / Sec 2 / 0
    4 / Sec 1.1 / 1
    5 / Sec 1.1.1 / 4
    7 / Sec 1.2 / 1
    8 / Sec 2.1 /2

    Et je souhaiterais avoir le classement ci-dessous :
    1 / Sec 1 / 0
    4 / Sec 1.1 / 1
    5 / Sec 1.1.1 / 4
    7 / Sec 1.2 / 1
    2 / Sec 2 / 0
    8 / Sec 2.1 /2


    J'ai bien trouvé une solution, mais peu plaisante :
    - on SELECT d'abord les lignes avec id_mere = 0;
    - pour chacune de ces lignes, on appelle une fonction qui va chercher les filles;
    - pour chaque fille trouvée, on va appeler la même fonction (qui devient récursive) pour trouver les petites-filles...

    Une solution peu pratique pour moi, car j'ai plusieurs traitements à faire pour la même requête. De plus, je pense que mon arbre ne sera pas très profond (profondeur max de 5).

    Y aurait-il la possibilité d'avoir une requête unique qui fasse ce tri (dans le style d'un x-JOIN, ou d'un UNION peut-être)?
    Ou ma solution est-elle la plus réaliste, et je dois alors faire autant de fonctions que de traitements?
    Ma version de MySQL est 5.X, aussi je peux également faire des requêtes imbriquées.

    Merci à vous.
    erazkan

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 291
    Par défaut
    La solution pour pouvoir tout traiter en requête et sans programmation, c'est la modélisation en intervalles : http://sqlpro.developpez.com/cours/arborescence/

  3. #3
    Membre averti
    Inscrit en
    Janvier 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2005
    Messages : 20
    Par défaut
    Mon seul problème, c'est que la structure est déjà existante, et donc que je ne peux la modifier... Mal pensée du départ, quoi.

    Je suis resté dans le concept des fonctions, mais j'ai simplifié ce système à l'extrême, histoire d'optimiser la vitesse des requêtes. Ainsi, je n'ai qu'une fonction récursive pour chercher les sections principales et toute sa descendance.

    L'idéal aurait été de pouvoir stocker les résultats de chaque appel à la bonne place, ainsi j'aurais pu appliquer mon traitement au résultat final, soit le tableau trié.

    Enfin bon, ça, c'est plus un tour de magie en PHP, et n'a plus sa place dans cette section du forum.
    Si il y en a qui ont le même problème, je partagerais ma solution (peu classieuse, je vous l'accorde) avec plaisir.

    Morale de l'histoire : TOUJOURS bien réfléchir à sa structure de base AVANT de développer son site...

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

Discussions similaires

  1. Remonter une arborescence
    Par Gwipi dans le forum Requêtes
    Réponses: 4
    Dernier message: 26/11/2003, 18h04
  2. [VB6] parcourir une arborescence de repertoire
    Par pecheur dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 30/04/2003, 17h33
  3. tri d'une liste
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 09/01/2003, 18h08
  4. créer une arborescence windows sous forme d'arbre java
    Par chupachoc dans le forum Composants
    Réponses: 3
    Dernier message: 01/10/2002, 16h48

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