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 PostgreSQL Discussion :

Arbre : lister tous les enfants [9.4]


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Par défaut Arbre : lister tous les enfants
    Bonjour,

    J'ai une table qui représente les liens entre les différents type de structures pouvant composer un établissement.

    La table est : annuaire.arbre_structure(structure_str_id, structure_str_id_child)

    je souhaiterais créer une fonction qui à partir de l'id d'une structure me donne toutes les types de sous structures possibles. Problème les cycles sont tout à fait possible.

    Je suppose que la vérité est dans la récursion mais j'avoue ne pas trop savoir comment arrêter celle ci.

    J'ai essayer ceci qui boucle infiniment si je ne met pas une condition d'arrêt sur la profondeur :

    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
     
    WITH RECURSIVE children(structure_str_id, structure_str_id_child, depth) AS (
     
    	SELECT
    		arbre.structure_str_id,
    		arbre.structure_str_id_child
    		, 1
    	FROM annuaire.arbre_structure AS arbre
    	WHERE arbre.structure_str_id = 1 -- change this to the root id
     
    	UNION ALL
     
    	SELECT distinct
    		arbre.structure_str_id,
    		arbre.structure_str_id_child
    		, children.depth + 1
    	FROM  annuaire.arbre_structure AS arbre 
            JOIN children ON arbre.structure_str_id = children.structure_str_id_child 
            WHERE depth < 10
     
    )
    SELECT * FROM children;
    Précision au cas où je suis sous 9.4.

    Merci d'avance !

  2. #2
    Membre éprouvé Avatar de Lady
    Femme Profil pro
    Développeur Java
    Inscrit en
    Mars 2003
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2003
    Messages : 678
    Par défaut
    Hum .... la réponse n'était vraiment pas loin en fait ... à 3 lettre pret ... Il suffit juste d'enlever le ALL de UNION ALL puis de faire un select distinct sur children ...

    Résolu !

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    Bonjour,

    Vous pouvez aussi vous reporter à l'article de SQLPro sur la récursivité, notamment le paragraphe où il indique comment éviter les boucles infinies

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

Discussions similaires

  1. Lister tous les triggers qui sont DISABLE
    Par mpeppler dans le forum Oracle
    Réponses: 2
    Dernier message: 23/08/2006, 10h05
  2. Réponses: 1
    Dernier message: 19/08/2006, 10h27
  3. MFC CDialog - lister tous les composants presents
    Par firejocker dans le forum MFC
    Réponses: 11
    Dernier message: 03/04/2006, 16h10
  4. Comment lister tous les composants d'une fiche ?
    Par tipiweb dans le forum Langage
    Réponses: 2
    Dernier message: 18/01/2006, 21h53
  5. Méthode pour supprimer tous les enfants d'un élément
    Par Pymm dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 10/05/2005, 12h10

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