Bonjour à tous,
J'ai affaire à un problème de requête SQL qui me dépasse, et je n'ai pas trouvé de solution ni même une piste valable en recherchant sur le web (forums, FAQ, etc.)
Pour info, je travaille sur une base Hyperfile à partir d'un site web développé avec WebDev9, mais je crois que mon problème est indépendant du SGBD, c'est surtout le raisonnement de construction de la requête qui me pose problème, pas la syntaxe ou les performances pour le moment...
La base en elle-même a de très nombreuses tables, mais l'ironie de ma situation, c'est que la requête ne porte que sur une seule table PIECES (contenant toutes les pièces d'un ensemble de machines)![]()
Les tables n'ont pas été créées à partir d'ordres SQL, mais grosso modo la structure de la table est la suivante :
CODE_PIECE (string, 210) (clef de la table)
APPARTENANCE (string, 50)
...
DESIGNATION (string, 200)
FABRICANT (string, 50)
et une trentaine d'autres colonnes sans lien avec ma requête
_______________________
Les pièces d'une machine sont classées selon une structure arborescente :
la colonne APPARTENANCE contient la valeur de CODE_PIECE de la pièce dont elle fait partie, à part les quelques pièces de niveau supérieur, auxquelles toutes les autres se rattachent directement ou indirectement (et qui ont donc une chaine vide dans la colonne APPARTENANCE)
Par exemple :
La pièce principale d'une machine :
[MOTEUR FTGP-573F] CODE_PIECE = "ABCDEF", APPARTENANCE = ""
Deux pièces :
[PARTIE_1_MOTEUR] CODE_PIECE = "XYZXYZ", APPARTENANCE = "ABCDEF" et
[PARTIE_2_MOTEUR] CODE_PIECE = "AZERTY", APPARTENANCE = "ABCDEF"
Et ainsi de suite :
[HELICE_1_PARTIE_1] CODE_PIECE = "UIOPQS", APPARTENANCE = "XYZXYZ"
...
...avec tout un arbre de pièces jusqu'à la dernière vis et au dernier écrou de la machine.![]()
Et donc mon problème est le suivant : il faut que j'affiche la liste des pièces d'une machine en conservant la structure arborescente :
[MOTEUR FTGP-573F]
[PARTIE_1_MOTEUR]
[HELICE_1_PARTIE_1]
[SUPPORT_PALE_1_HELICE_1]
...
[HELICE_2_PARTIE_1]
...
[PARTIE_1_MOTEUR]
...
J'ai écarté pour le moment les questions de présentation des données (ordonnées et avec alinea pour faire comme une sorte de "treeview statique"). La difficulté qui m'arrête, c'est que je ne sais pas combien de "niveaux" il y a en-dessous de chaque pièce... comment faire ?
Mes élucubrations actuelles (qui je l'espère ne vont pas m'expédier vers le bétisier ou même directement sur la case "the daily WTF") vont vers ce genre de pistes :
...mais avec un nombre variable de "niveaux" ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 SELECT * FROM PIECES as Pn WHERE CODE_PIECE = ( SELECT APPARTENANCE FROM PIECES as P2 WHERE CODE_PIECE = ( SELECT APPARTENANCE FROM PIECES as P3 WHERE CODE_PIECE = 'code de la machine dont je veux la liste des pièces'
Hum... merci aux courageux qui sont arrivés jusqu'ici, et encore plus aux éventuels oufs qui auraient la gentillesse (et les capacités) de m'aider à passer cette embûche ^^
Partager