Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
966 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [PostgreSQL] Requête hiérarchique

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PostgreSQL] Requête hiérarchique

n°2372747
BMenez
Posté le 03-01-2021 à 18:50:31  profilanswer
 

J'ai une base de donnée représentant un schéma de câblage :
 


                          Table "t_cable"
   Column    |            Type             | Collation | Nullable | Default  
-------------+-----------------------------+-----------+----------+---------
  c_code     | character varying(254)      |           | not null |  
  c_batiment | character varying(254)      |           |          |  
  c_color    | character varying(10)       |           |          |  


 
Chaque branchement est défini par :


                        Table "t_cablage"
   Column   |            Type             | Collation | Nullable | Default  
------------+-----------------------------+-----------+----------+---------
 ps_code    | character varying(254)      |           | not null |  
 ps_1       | character varying(254)      |           |          |  
 ps_2       | character varying(254)      |           |          |  


 
ps_1 et ps_2 sont issus de c_code
 
Par exemple :


  ps_code  |  ps_1  | ps_2
-----------+--------+-------+
 br1       | bleu   |            
 br2       | orange |
 br3       |        | violet
 br4       | vert   |
 br5       | bleu   | jaune
 br6       | vert   | rouge
 br7       | orange | violet
 br8       | rouge  | jaune


(La valeur null indique que le câble est actif / branché sur un équipement)
 
Je cherche à suivre une connexion de son origine à son extrémité. Donc, pour le câble jaune, avec le tableau ci-dessus :

(équipement) <-> bleu <-> jaune <-> rouge <-> vert <-> (équipement)


 
J'utilise cette requête pour sortir la liste des câbles reliés au câble jaune :

WITH RECURSIVE subordinates AS (
 SELECT                      
   ps_1,
   ps_2
 FROM
   t_cablage
 WHERE
   ps_1 = 'jaune' OR
   ps_2 = 'jaune'
 UNION
   SELECT
     po.ps_1,
     po.ps_2
   FROM
     t_cablage ca
   INNER JOIN subordinates s ON s.ps_1 = ca.ps_1
                             OR s.ps_1 = ca.ps_2
                             OR s.ps_2 = ca.ps_2
                             OR s.ps_2 = ca.ps_1)
SELECT * FROM subordinates;


 
Mon problème est que ça ne me sort pas le cheminement.
Le problème pourrait être simple si j'avais ps_1 et ps_2 avec une relation parent->enfant à sens unique mais ce n'est pas le cas (le parent peut être ps_1 ou ps_2)
 
Existe-t-il une requête permettant de sortir le cheminement en partant d'une extrémité et prenant en entrée un câble participant à la liaison ?

mood
Publicité
Posté le 03-01-2021 à 18:50:31  profilanswer
 

n°2378048
el muchach​o
Comfortably Numb
Posté le 09-03-2021 à 07:54:48  profilanswer
 

Désolé de répondre si tard.
Mais ça ne me viendrait pas à l'idée de faire ça dans une BD relationnelle.
Il y a un type de BD spécifique pour ce genre de problème, les bases de données orientées graphes comme Neo4J.
 
Votre problème est spécifiquement mentionné comme un des cas d'utilisation de ce type de BD:
https://www.smalsresearch.be/sept-b [...] -database/
 
Si vous voulez faire une structure d'arbre en SQL, j'ai du code pour ça, mais à mon avis ça ne résoudra pas votre problème. Pour cela, il faut soit un truc comme Neo4J, soit résoudre le problème de façon programmatique, càd dans un "vrai" langage, et pas en SQL, qui n'est pas fait pour ça.
Postgres permet de faire tourner du code en interne via un langage de votre choix pour résoudre ce type de problème, mais le SQL n'est pas la solution.


Message édité par el muchacho le 09-03-2021 à 08:03:18
n°2378060
BMenez
Posté le 09-03-2021 à 09:11:33  profilanswer
 

Merci pour la réponse :)
Ce n'est pas celle que j’espérai mais elle donne des pistes. Merci [:cerveau charlest]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [PostgreSQL] Requête hiérarchique

 

Sujets relatifs
envoi de requête en php sur Home-assistantconversion requête sql XML -> JSON
Récupérer résultat d'une réquête dans un tableau en shell (ksh)requête SQL en php
SQL DISTINCT requete spéciale (POSTGRESQL)Encore mes plantages bizarres (POSTGRESQL cette fois)
MYSQL : update et select en une seule requêtePREPARE PostGreSQL Ca marche... presque
Excel - intégration de données JSON via requête sur site WEB 
Plus de sujets relatifs à : [PostgreSQL] Requête hiérarchique


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR