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

PostgreSQL Discussion :

récursivité


Sujet :

PostgreSQL

  1. #1
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 70
    Points : 46
    Points
    46
    Par défaut récursivité
    un autre probleme sous postgresql,
    gere t'il correctement la récursivité ?

    Car il me sort n'importe quoi quand je tente de faire ce genre de requêtes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Select *
    from Materiel M1, Materiel M2, Materiel M3, Materiel M4
    where 
    M1.MAT_CODE = M2.MAT_CODE_Recur
    and
    M2.MAT_CODE = M3.MAT_CODE_Recur
    and
    M3.MAT_CODE = M4.MAT_CODE_Recur;
    Pourtant ca fonctionne bien sous Oracle (même si le système des levels est netement plus opti...)
    Etant donné que la vitesse de la lumière est nettement supérieure à la vitesse du son, c'est sûrement pour ça que certains paraissent brillants avant d'ouvrir leurs gueules...
    www.eldrenn.com ou www.eldrenn.net

  2. #2
    Membre actif

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 209
    Points : 249
    Points
    249
    Par défaut
    C'est quoi la réfléxibilité (qui n'existe pas comme mot)??? Tu es sûr que tu ne parles pas de la récursivité??? :

  3. #3
    Candidat au Club
    Inscrit en
    Mai 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    J'aurais tendance à penser qu'il s'agit de réflexivité mais bon...
    Voir... c'est croire !!! (powered by W3)

  4. #4
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 70
    Points : 46
    Points
    46
    Par défaut
    pardonnez ce copier coller montrueux que j'ai fait dans un coup de speed qui me vaut la honte
    Non serieux, c'est pas ca qui resoud mon problème mais ca navre quand même.
    Etant donné que la vitesse de la lumière est nettement supérieure à la vitesse du son, c'est sûrement pour ça que certains paraissent brillants avant d'ouvrir leurs gueules...
    www.eldrenn.com ou www.eldrenn.net

  5. #5
    Membre actif

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 209
    Points : 249
    Points
    249
    Par défaut
    Je suis désolé mais je ne comprends rien! Ton problème c'est quoi pour finir?

  6. #6
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 70
    Points : 46
    Points
    46
    Par défaut
    A signaler tiens, le mot réflexif existe dans Merise et veux dire la même chose.

    Le problème pour y revenir, le voici
    Eh bien j'ai créé une table matériel.

    Un matériel , pouvant être un PC par exemple et également une carte mère, un processeur ou que sais-je encore, je l'ai défini récursive.

    Quand on fait sous Oracle la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Select * 
    from Materiel M1, Materiel M2, Materiel M3, Materiel M4 
    where 
    M1.MAT_CODE = M2.MAT_CODE_Recur 
    and 
    M2.MAT_CODE = M3.MAT_CODE_Recur 
    and 
    M3.MAT_CODE = M4.MAT_CODE_Recur;
    Cela permet de ressortir les infos sur toutes les recrussions

    Et le problème sous PostgreSQL c'est qu'il me sort n'importe quoi (genre 5 fois les mêmes champs...)

    Ma question était, ma requête pour PostgreSQL est t'elle fausse, si oui, comment faire
    Etant donné que la vitesse de la lumière est nettement supérieure à la vitesse du son, c'est sûrement pour ça que certains paraissent brillants avant d'ouvrir leurs gueules...
    www.eldrenn.com ou www.eldrenn.net

  7. #7
    Membre actif

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 209
    Points : 249
    Points
    249
    Par défaut
    J'ai fait un exemple. C'est bien ce que tu cherches à faire?

    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
    23
    24
    25
    26
    27
    28
    scratch=# \d matos
                Table "public.matos"
     Column |         Type          | Modifiers
    --------+-----------------------+-----------
     id     | integer               | not null
     id_cur | integer               |
     nom    | character varying(30) |
    Indexes:
        "matos_pkey" primary key, btree (id)
     
    scratch=# select * from matos;
     id | id_cur |    nom
    ----+--------+------------
      0 |        | PC
      1 |      0 | carte mère
      2 |      0 | carte son
      3 |      0 | écran
      4 |      1 | processeur
    (5 rows)
     
    scratch=# select m1.nom,m2.nom from matos m1, matos m2 where m1.id = m2.id_cur
    and m1.id = 0;
     nom |    nom
    -----+------------
     PC  | carte mère
     PC  | carte son
     PC  | écran
    (3 rows)

  8. #8
    Membre actif

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 209
    Points : 249
    Points
    249
    Par défaut
    T'es sur que ton problème ne vient pas du fait que tu ne fais pas de projection dans ta requête?

  9. #9
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 70
    Points : 46
    Points
    46
    Par défaut
    Hop, aller une nouvelle journée de taf.
    Merci je vais regarder ca et je te dis...
    Etant donné que la vitesse de la lumière est nettement supérieure à la vitesse du son, c'est sûrement pour ça que certains paraissent brillants avant d'ouvrir leurs gueules...
    www.eldrenn.com ou www.eldrenn.net

  10. #10
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 70
    Points : 46
    Points
    46
    Par défaut
    Ok ! c'est bon,
    c'etait finalement une erreur de mon tuteur de stage...

    voila ce qui c'est passé,
    j'ai une table materiel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    MAT_CODE     | MAT_CODE_RECU        |  MAT_LIBELLE
    -------------+----------------------+----------------
               1 |                 NULL |      PC
               2 |                    1 |      Carte mere
               3 |                    2 |      Processeur
               4 |                    1 |      Clavier
               5 |                 NULL |      Serveur
    et lui voulait faire cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Select *						
    from Materiel M1, Materiel M2,Materiel M3, .....		
    where M.MAT_CODE = M2.MAT_CODE_R (+)
    Evidement vu que (+) ne fonctionne pas sous postgres...
    ca ne reviens pas a faire ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Select * 
    from Materiel M1, Materiel M2, Materiel M3, Materiel M4 
    where 
    M1.MAT_CODE = M2.MAT_CODE_RECU
    and 
    M2.MAT_CODE = M3.MAT_CODE_RECU
    and 
    M3.MAT_CODE = M4.MAT_CODE_RECU;
    Avec une bonne nuit de sommeil, la je me rend compte de cette connerie enorme !
    bon maintenant il faut que je trouve l'équivalant mon idée c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select 						
    m1.MAT_LIBELLE , m2.MAT_LIBELLE
    from 
    Materiel m1 right join Materiel m2 on
    m1.MAT_CODE = m2.MAT_CODE_RECU
    Mais je ne peut pas aller a plus de 2 niveaux...
    Lui me dis de passer par Union je ne sais pas si ca va le faire...
    Etant donné que la vitesse de la lumière est nettement supérieure à la vitesse du son, c'est sûrement pour ça que certains paraissent brillants avant d'ouvrir leurs gueules...
    www.eldrenn.com ou www.eldrenn.net

  11. #11
    Membre actif

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 209
    Points : 249
    Points
    249
    Par défaut
    Non, tu peux faire cela sur 3 niveaux... par exemple, en reprenant mon exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    scratch=# select m1.nom,m2.nom,m3.nom from matos m1 right join (matos m2 left j
    oin matos m3 on m2.id=m3.id_cur) on m2.id_cur = m1.id where m1.id=0;
     nom |    nom     |    nom
    -----+------------+------------
     PC  | carte mère | processeur
     PC  | carte son  |
     PC  | écran      |
    (3 rows)
    Mais si tu veux une vrai récursivité, il faut implémenter cela de manière totalement différente. Voir le problème avec des arbres... tu peux lire ce bout de théorie dans le livre de Frédéric Brouard qui je crois!

    A+

  12. #12
    Membre actif

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2003
    Messages : 209
    Points : 249
    Points
    249
    Par défaut
    et comme cela sans jointure externe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    scratch=# select m1.nom,m2.nom,m3.nom from matos m1, matos m2, matos m3 where m
    1.id=m2.id_cur and m2.id = m3.id_cur and m1.id = 0;
     nom |    nom     |    nom
    -----+------------+------------
     PC  | carte mère | processeur
    (1 row)

  13. #13
    Membre du Club
    Inscrit en
    Avril 2004
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 70
    Points : 46
    Points
    46
    Par défaut
    Ok ca fonctionne bien merci.
    Pour la théorie des arbres, esque tu parle des R-tree ou esce autre chose ?
    En gros je dois me doter du livre de ce M. Frédéric Brouard quoi ...
    Etant donné que la vitesse de la lumière est nettement supérieure à la vitesse du son, c'est sûrement pour ça que certains paraissent brillants avant d'ouvrir leurs gueules...
    www.eldrenn.com ou www.eldrenn.net

Discussions similaires

  1. Cours : algorithmes et récursivité
    Par Community Management dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 17/10/2018, 00h38
  2. [XML]xml et dtd : récursivité d'un noeud
    Par Jeddo dans le forum Valider
    Réponses: 2
    Dernier message: 29/04/2005, 17h25
  3. [Système] Récursivité et itération
    Par Floréal dans le forum Langage
    Réponses: 8
    Dernier message: 19/04/2005, 14h57
  4. Parcours d'arbre sans récursivité
    Par Morvan Mikael dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 12/04/2005, 13h57
  5. [PS] Récursivité !
    Par maitrebn dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/10/2004, 12h18

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