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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Stocker les étapes d'une requête SQL en table

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Stocker les étapes d'une requête SQL en table

n°2133529
rockbottom
Posté le 28-03-2012 à 17:12:25  profilanswer
 

Bonjour à tous!
 
Pour un projet perso, j'essaye de m'amuser à "générer" une requête SQL depuis les différents éléments du WHERE stockés dans une table.  
Ma requête s'effectue sur une seule table (pas de jointures donc), composée de multiples colonnes.  
 
 
Mon MCD se décompose rapidement ainsi :  
 
MA_TABLE (#personneID, sexe, poids, age ...)
 
CHAMP (ColonneID, ColonneLabel,) // -> Liste des colonnes dispos dans ma table. (par exemple colonneID = 2; ColonneLabel = sexe)
 
OPERATEUR (OperateurID, OperateurLabel) // -> Liste des différents opérateurs utilisables (<, >, <=, >=, =, OR, AND ...)
 
CHAMP_OPERATEUR (#ColonneID, #OperateurID) // -> Définition pour chaque colonne des différents opérateurs dispos.
 
DEMANDE (demandeID, demandeLabel, demandeDate) // -> Une demande, cela correspond à une requête SQL, le label pour s'y retrouver, et la date de l'éxécution.  
 
CALCUL (#demandeID, CalculID)
 
DETAIL (#demandeID, #calculID, detailID, etapeID, etapeType, etapeValeur)
 
CALCUL_INTERACTION (#demandeID, #calculID1, #calculID2, operateurID)
 
 
 
 
 
En fait, mon souhait est de reconstruire la requête SQL, depuis les critères stockés.  
 
Ma façon de raisonner est la suivante :  
 
Je voudrais que ma petite appli sous forme de formulaire web, permette à un utilisateur novice au SQL de définir son WHERE.  
 
 
 
http://img11.hostingpics.net/pics/514788exemple.png
 
 
 
 
Dans ce petit exemple, cela se décompose ainsi :  
 
En bleu, les 2 calculID distints 1 et 2, qui du coup générent 2 paires de parenthèses. Ces 2 calculs sont reliés par un opérateurID ("OR" ).  
En rouge, les différents opérateurs appliqués à chaque colonne.  
Enfin en mauve, les valeurs.  
Et à l'intérieur de chaque 'calcul', il y a donc les différentes étapes, qui peuvent être soit relatives à la définition d'une colonne, d'un opérateur, ou d'une valeur.
 
Dans cet exemple, la table DETAIL serait remplie ainsi :  
 
INSERT INTO DETAIL VALUES (1, 1, 1, 1, 1 (colonne), 3 (age))
INSERT INTO DETAIL VALUES (1, 1, 1, 2, 2 (opérateur), 1 (< ))
INSERT INTO DETAIL VALUES (1, 1, 1, 3, 3 (valeur), 30)
INSERT INTO DETAIL VALUES (1, 1, 1, 4, 2 (opérateur), 4 (AND))
INSERT INTO DETAIL VALUES (1, 1, 1, 5, 1 (colonne), 2 (sexe))
INSERT INTO DETAIL VALUES (1, 1, 1, 6, 2 (opérateur), 2 (=))
INSERT INTO DETAIL VALUES (1, 1, 1, 1, 3 (valeur), Homme)
 
INSERT INTO DETAIL VALUES (1, 2, 1, 1, 1 (colonne), 3 (taille))
INSERT INTO DETAIL VALUES (1, 2, 1, 2, 2 (opérateur), 6 (>=))
INSERT INTO DETAIL VALUES (1, 2, 1, 3, 3 (valeur), 80)
INSERT INTO DETAIL VALUES (1, 2, 1, 4, 2 (opérateur), 4 (AND))
INSERT INTO DETAIL VALUES (1, 2, 1, 5, 1 (colonne), 5 (poids))
INSERT INTO DETAIL VALUES (1, 2, 1, 6, 2 (opérateur), 1 (< ))
INSERT INTO DETAIL VALUES (1, 2, 1, 1, 3 (valeur), 65)
 
INSERT INTO CALCUL_INTERACTION VALUES (1, 1, 2, 7 (OR))
 
 
Je suis en ce moment en train de faire un petit bout de code permettant de convertir ces différentes étapes en "WHERE ..." SQL.  
 
J'arrive à boucler sur chaque calcul, puis sur chaque "étape" de ma table DETAILS propre à ce calcul, j'obtiens alors quelquechose du style :  
 
 
SELECT *  
FROM MA_TABLE
WHERE ((age < 30 AND SEXE = 'H') (TAILLE = 180) )  
 
Mais comme vous le voyez, je n'arrive pas à intégrer mes "OR" ou "AND" entre mes CalculID à récupérer depuis ma table CALCUL_INTERACTION ...  
 
 
 
Le but de mon topic est de savoir si certains d'entre vous s'étaient déjà amusé à faire ce genre de choses :) et vous faire partager mon avancement sur cette petite appli.  
Si certains se sentent prêts à m'aider à mettre en place l'algo de génération du where, n'hésitez pas :)
 
@+
 
 
 
 
 

mood
Publicité
Posté le 28-03-2012 à 17:12:25  profilanswer
 


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

  Stocker les étapes d'une requête SQL en table

 

Sujets relatifs
Colonne qui change de nom toute seule dans SQL ServerRequête SQL avec jointure
Code vba exportation requête acces vers ExcelRequete sur 3 tables
[PHP+SQL] Cherche un petit coup de main pour une application simplecompter le nombre de champs vides dans 1 enregistrement SQL
[SQL 2005 SSIS] extract data, préserver les id de la base source Verrouiller un champs d'une table
[ORACLE] Combinaison de deux résultats de requête 
Plus de sujets relatifs à : Stocker les étapes d'une requête SQL en table


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