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 :

Requête - Cas pratique pas si évident


Sujet :

Langage SQL

  1. #1
    Membre habitué Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Points : 193
    Points
    193
    Par défaut Requête - Cas pratique pas si évident
    Bonjour à tous,

    Voici le problème:

    J'ai une table qui contient 3 colonnes: id name parentId
    Elle contient:
    id | name | parentId
    1 | n1 | 2
    2 | n2 | 4
    3 | n3 |
    4 | n4 | 7
    5 | n5 | 3
    6 | n6 | 3
    7 | n7 |
    Le but était de faire une auto-jointure pour récupérer les branches (les parents ou enfants) d'une entrée avec par exemple avec comme clause where id = 1.

    On peut constater l'abre suivant:

    n7 -> n4 -> n2 -> n1
    avec la clause where id = 3, on peut constater l'arbre suivant qui a deux branches:

    -> n6
    n3
    -> n5
    Mais ça ne fonctionne pas le script s'arrête à une entrée. Comment arriver à se résultat en sql? Est-ce possible de faire ça sans faire une fonction récursive qui envoie des requêtes sql?

    Merci à tous pour votre aide .

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    La recurssion c'est par ici : http://sqlpro.developpez.com/cours/s...te-recursives/

    Ensuite, selon votre SGBD, vous pouvez avoir d'autre méthode.

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Bonjour

    Quel est votre SGBD ?

    Si c'est Oracle, la solution réside dans ce type de requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
         select connect_by_isleaf, 
               level, 
               id, 
               idParent
          from theTable
              start with id = THEFIRSTID
                connect by prior idParent = id;
    Notez les pseudo-colonne connect_by_isleaf et level.
    Notez aussi que connect by prior idParent = id n'est pas identique à connect by prior id= idParent (on fait l'affectation dans un sens ou l'autre suivant qu'on veut parcourir vers les parents ou vers les enfants).

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par punkoff Voir le message
    Bonjour,

    La recurssion c'est par ici : http://sqlpro.developpez.com/cours/s...te-recursives/
    Il n'y a pas une légére erreur dans le titre ? je ne connais aucune version de Sql Server qui s'appelle Sql Server 2003.

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    Demandez à SQLPro vu que c'est lui qui a fait l'article.
    Le contenu, lui, est intéressant et applicable à de nombreux SGBD

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Bonjour,

    Citation Envoyé par punkoff Voir le message
    Demandez à SQLPro vu que c'est lui qui a fait l'article.
    Pas la peine, car c'est un détail et, de plus, il va passer par là tôt ou tard.

    Le contenu, lui, est intéressant et applicable à de nombreux SGBD
    Tout à fait, mais il existe sur Oracle une autre solution utilisant des instructions spécifiques, comme je le mentionne supra.

    De ce fait il serait intéressant que le PO mentionne le SGBD utilisé.

  7. #7
    Membre habitué Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Points : 193
    Points
    193
    Par défaut
    Merci pour vos réponses je vais les étudier. Gros oublie de ma part la base de données c'est MySql!

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Tout ceci n'est pas supporté par MySql.

  9. #9
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par xess91 Voir le message
    Merci pour vos réponses je vais les étudier. Gros oublie de ma part la base de données c'est MySql!
    Ah la ça va être plus dur. Les réponses données considéraient un "vrai" SGBD.

  10. #10
    Membre habitué Avatar de xess91
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 408
    Points : 193
    Points
    193
    Par défaut
    Effectivement,

    Grâce à vos réponses j'ai effectuer des recherches dans google avec certain mots clés comme: "connect by prior" ou encore "requête récursive".

    Tout ce que je trouve se ressemble...c'est pas possible avec Mysql

  11. #11
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Vous pourrez surement vous en sortir grace à une procedure stockée par contre.

    Où gérer ca dans votre code applicatif si vous n'avez pas trop de volumétrie..
    (Sinon il existe des versions gratuite d'autre SGBD qui font tout ceci : PostGreSql, Oracle, SQLServeur, DB2, ..)

Discussions similaires

  1. [MySQL] Une requête n'aboutissant pas
    Par Livingstone dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/02/2006, 10h36
  2. HTML/IFRAME : cas pratique à étudier pour confirmé
    Par Naos2 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 27/01/2006, 14h39
  3. [Oracle 9.i] Requête qui passe pas
    Par ftrifiro dans le forum Langage SQL
    Réponses: 7
    Dernier message: 20/12/2005, 17h32
  4. Réponses: 4
    Dernier message: 04/07/2005, 09h36
  5. Réponses: 3
    Dernier message: 16/11/2004, 15h51

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