-
Detecter de jointure
Bonjour à tous,
Depuis mon code, je dois interroger des tables d'une base de données.
L'utilisateur a toute liberté quand à la sélection des données qu'il veut consulter.
Je dois donc construire dynamiquement ma requête en fonction de ses choix mais en respectant les éventuelles jointures de tables.
Ne les connaissant pas à l'avance, comment les détecter depuis mon code afin de construire ma requête en conséquence ?
Merci
Fabrice
-
Salut,
perso, je ne vois pas comment tu veux faire ca automatiquement.
La brut de fondrie, je dirais qu'il est peut être possible de lire les propriétés d'une table et de voir les clès externes.
Mais sinon, en ce moment, on est en train de développer un espéce de requetteur qui permettra de sélectionner des tables et de proposer de faire sa requête.
Mais nous aurons préalablement définit les jointures
-
détecter les jointures est faisable si ton sgbd peut t'aider à le faire
sql server enregistre les jointures dans des tables donc il est possible de lire les définitions (sys.foreign_key_columns, sys.syscolumns ...)
après il faut penser qu'il y aura peut etre plusieurs cheminements d'une table à une autre, ou des jointures possibles sur 2 champs pour des tables cycliques alors qu'il faut en prendre qu'une ...
donc il est peut etre préférable de montrer les résultats à l'utilisateur pour qu'il en choisisse une parmis celles qui sont possibles
-
Si je comprends bien, tu fais des requêtes générées dynamiquement, sur des données se trouvant dans différentes tables, en fonction de critères de recherche quelconques ?
Je vois 2 solutions :
- soit tu fais les jointures de façon conditionnelles, en vérifiant si tu as besoin ou nom des champs de la table à joindre (comme critère ou comme donnée)
- soit tu fais systématiquement toutes les jointures, mais en n'utilisant pas forcément des champs de toutes les tables. Cette solution rend beaucoup plus facile la génération des requêtes, mais n'est utilisable que si le volume de données est relativement faible. Pour un gros volume, tu es quasiment obligé de ne faire que les jointures utiles, pour optimiser la requête