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

Langage SQL Discussion :

[SQL] requête de sélection récursive ? ou impossible ?


Sujet :

Langage SQL

  1. #1
    Membre régulier Avatar de toxine
    Inscrit en
    Juin 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2004
    Messages : 78
    Points : 78
    Points
    78
    Par défaut [SQL] requête de sélection récursive ? ou impossible ?
    Bonjour,

    J'ai modéliser des arbres dans une table de la façon suivante
    J'ai une base de données MySQL possédant une table "composer" contenant une colonne "éléments père" avec une colonne "élément fils" (cet élément fils est le fils direct)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    pere|fils
    -----
    1|2
    1|3
    1|4
    5|6
    5|7
    5|8
    9|10
    17|9
    de cette façon, on a que 1 est le père de 2,3,4
    5 est le père de 6,7,8
    9 est le père de 10
    et 17 est le père de 9

    J'aimerais contruire une table (ou un tableau dans le code) contenant la structure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    élément_racine|élément_dépendant
    1|2,3,4
    5|6,7,8
    17|9,10
    Est-ce possible avec une ou plusieurs requêtes SQL ??
    J'arrive pour l'instant à obtenir tous les éléments racine sans aucun problème mais par contre pour sélectionner les éléments dépendant, c'est une autre paire de manche.

    Si ce n'est pas possible à faire avec des requêtes SQL, estce possible autrement (dans le code)?

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227

  3. #3
    Membre régulier Avatar de toxine
    Inscrit en
    Juin 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2004
    Messages : 78
    Points : 78
    Points
    78
    Par défaut
    merci j'ai déjà lu cet article mais je ne peux pas changer la représentation de l'arbre en BDD

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Dans ce cas, et à ma connaissance, pas de solution SQL générale hors récursivité (CONNECT BY de ORACLE ou WITH RECURSIVE de la norme SQL99).

    Il est possible de trouver une solution très inélégante si tu connais la profondeur maximale de ton arbre

  5. #5
    Membre régulier Avatar de toxine
    Inscrit en
    Juin 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2004
    Messages : 78
    Points : 78
    Points
    78
    Par défaut
    le problème de cette représentation c'est que c'est TRES gourmant en ressources ...
    j'ai réussi à savoir si un élément est dépendant ou non d'un autre de façon récursive en faisant une fonction récursive qui interroge la BDD à l'aide de requêtes du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT element_fils FROM table WHERE element_pere = [i]id_de_lelement_précédemment_trouvé[/i]
    c'est horrible et tres lent ...

    Est ce qu'il vaut mieux que j'effectue beaucoup de petites requêtes SQL (comme celles au dessus) ou une seule qui récupère toute la table que je traite ensuite en mémoire (dans le code) ?

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Donc si j'ai bien compris, on ne parle plus de SQL, mais de langage procédural (php, par exemple), c'est bien cela ?

    As-tu essayé de créer un index sur ta colonne element_pere ?

  7. #7
    Membre régulier Avatar de toxine
    Inscrit en
    Juin 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2004
    Messages : 78
    Points : 78
    Points
    78
    Par défaut
    de language objet plutôt (je développe une application en VB .NET).

    Je me demandais si c'était plus performant de faire plein de requetes sur une représentation de l'arbre sur une table de la base de données ou alors récupérer la représentation de la table puis de le traiter dans mon programme:
    en gros, faire bosser la base de données ou alors le programme.

  8. #8
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Si avec un index sur element_pere, ton problème de performance a disparu, c'est la solution que je te conseillerais.

  9. #9
    Membre régulier Avatar de toxine
    Inscrit en
    Juin 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2004
    Messages : 78
    Points : 78
    Points
    78
    Par défaut
    ok je viens d'en mettre un. Je fais le test et je te dis si ça change quelquechose.

  10. #10
    Membre régulier Avatar de toxine
    Inscrit en
    Juin 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juin 2004
    Messages : 78
    Points : 78
    Points
    78
    Par défaut
    effectivement ça accélère un petit peu les choses mais pas trop...
    je vais réfléchir a un moyen de traiter cela dans mon programme et non par SQL.
    merci quand même !

Discussions similaires

  1. [SQL] Créer une requête de sélection quelque peu complexe
    Par Emotion dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/10/2007, 20h36
  2. [SQL] Id séparés par des virgules et requête de sélection
    Par Emotion dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 18/09/2007, 23h48
  3. [Requête/SQL]Problème de sélection d'enregistrements
    Par phil06 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 15/04/2007, 23h47
  4. [SQL] Requête de sélection particulière
    Par renaudjuif dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 02/05/2006, 12h17
  5. Réponses: 1
    Dernier message: 03/08/2005, 11h41

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