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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  select sur toutes les colonnes commençant par un certain mot

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

select sur toutes les colonnes commençant par un certain mot

n°1485692
m1sterd
Posté le 03-12-2006 à 18:01:49  profilanswer
 

Bonjour,
 
J'ai une table dont je connais pas à l'avance le nombre de colonnes. Je veux faire un select sur toutes les colonnes commençant par un certain mot. Est-ce possible?
 
Merci!
 

mood
Publicité
Posté le 03-12-2006 à 18:01:49  profilanswer
 

n°1485696
flo850
moi je
Posté le 03-12-2006 à 18:04:16  profilanswer
 

pas dans le cas general  a ma connaissance
 
mais il y a peut etre moyen avec un show column de generer la requete qui va bien  
 


---------------

n°1485839
leflos5
On est ou on est pas :)
Posté le 04-12-2006 à 05:42:11  profilanswer
 

T'es obligé d'avoir le nom de tes colonnes ou bien tu prends tout avec * :whistle:
 
Je pense que le plus simple (y'a peut être des truc tordus :??: ) serait de générer la requête qui va bien dans un langage (je  suppose que tu utilises autre chose qu'un client du sgbd :d )

n°1485850
sircam
I Like Trains
Posté le 04-12-2006 à 08:34:24  profilanswer
 

Par exemple, avec JDBC, tu peux obtenir des meta-informations dont les noms des colonnes. Mais c'est jouable avec n'importe quel autre langage.
 
(je  suppose que tu utilises autre chose qu'un client du sgbd)
 
Moi aussi [:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1485909
MagicBuzz
Posté le 04-12-2006 à 10:42:28  profilanswer
 

le fait de vouloir filtrer par le nom des colonnes, c'est que le nom des colonnes fait partie des données à gérer.
à partir de là, il y a un problème de conception.
 
en effet, le modèle des données doit être une chose qu'on maîtrise parfaitement, et qui est totalement figé. il doit être dénué de toute information. c'est lui le conteneur des données, il n'en fait pas partie.
 
bref, imaginons que tu as une table actuellement :
 
matable
---------------
id
propriete1
propriete2
propriete3
 
Avec "id" est l'ensemble de champ définisant la clé primaire
"prorieteX" l'ensemble des champs "inconnus"
 
Alors tu peux parfaitement dématérialiser ta table de la façon suivante :
 
columns
----------
col_id
nom
 
values
----------
id (la clé de l'ancienne table)
col_id
value
 
dans ce nouveau modèle, on ajoute "col_id" dans la clé "id" de la table "values".
si besoin, on peut faire une table de référence supplémentaire "table" (qui contient un "tab_id" qui sera rapporté dans la clé de "values" ) contenant la liste des noms de tables qu'on veut gérer de la sorte. on pourra ainsi stocker un nombre infini de "tables" dans seulement ces 3 tables.
 
a noter qu'on peut aussi ajouter une quatrième table "tab_columns" qui va permettre de faire le lien entre "tab_id" et "col_id" (on aura une FK dans "values" qui pointe dessus). cette table permettra de vérifier que les données saisies dans "values" pour une table donnée correspondent ben à une colonne existante pour la dite table.
 
 
exemple de ce que ça peut donner :


select t.nom, v.id, c.nom, v.value
from tables t
inner join tab_columns tc on tc.tab_id = t.tab_id
inner join columns c on c.col_id = tc.col_id
inner join values v on v.tab_id = tc.tab_id and v.col_id = tc.col_id
where t.nom = 'matable'
and c.nom like 'nom%'

Message cité 1 fois
Message édité par MagicBuzz le 04-12-2006 à 10:43:41
n°1486877
leflos5
On est ou on est pas :)
Posté le 06-12-2006 à 05:44:31  profilanswer
 

MagicBuzz a écrit :

le fait de vouloir filtrer par le nom des colonnes, c'est que le nom des colonnes fait partie des données à gérer.
à partir de là, il y a un problème de conception.
 
en effet, le modèle des données doit être une chose qu'on maîtrise parfaitement, et qui est totalement figé. il doit être dénué de toute information. c'est lui le conteneur des données, il n'en fait pas partie.

bref, imaginons que tu as une table actuellement :
 
matable
---------------
id
propriete1
propriete2
propriete3
 
Avec "id" est l'ensemble de champ définisant la clé primaire
"prorieteX" l'ensemble des champs "inconnus"
 
Alors tu peux parfaitement dématérialiser ta table de la façon suivante :
 
columns
----------
col_id
nom
 
values
----------
id (la clé de l'ancienne table)
col_id
value
 
dans ce nouveau modèle, on ajoute "col_id" dans la clé "id" de la table "values".
si besoin, on peut faire une table de référence supplémentaire "table" (qui contient un "tab_id" qui sera rapporté dans la clé de "values" ) contenant la liste des noms de tables qu'on veut gérer de la sorte. on pourra ainsi stocker un nombre infini de "tables" dans seulement ces 3 tables.
 
a noter qu'on peut aussi ajouter une quatrième table "tab_columns" qui va permettre de faire le lien entre "tab_id" et "col_id" (on aura une FK dans "values" qui pointe dessus). cette table permettra de vérifier que les données saisies dans "values" pour une table donnée correspondent ben à une colonne existante pour la dite table.
 
 
exemple de ce que ça peut donner :


select t.nom, v.id, c.nom, v.value
from tables t
inner join tab_columns tc on tc.tab_id = t.tab_id
inner join columns c on c.col_id = tc.col_id
inner join values v on v.tab_id = tc.tab_id and v.col_id = tc.col_id
where t.nom = 'matable'
and c.nom like 'nom%'



Ca c'est ton point de vue qui se base purement et uniquement sur la théorie ;) Avoir une base qui s'autodonne du sens ça permet de faire des choses que tu ferais bien moins facilement si la structure est fixe et que tu dois passer par un système comme tu l'évoques :spamafote:
 
Maintenant je pense qu'il y a quand même un souci quelque part dans le cas évoqué parce qu'en effet tu dois quand même être capable de savoir où tu vas avec des règles fixes (mais pas aussi dénuées de sens qu'on pourrait le croire) :jap:

n°1486934
MagicBuzz
Posté le 06-12-2006 à 09:52:55  profilanswer
 

j'ai pas dit que le modèle n'avait pas de sens, j'ai dit qu'il était dénué d'information.
 
par exemple, t'as une table "quizz_résultat".
 
en aucun cas il ne faut avoir les colonnes :
 
utilisateur_id
resultat_question_1
resultat_question_2
resultat_question_3
resultat_question_4
resultat_question_5
resultat_question_6
resultat_question_7
 
Car ici, ton modèle donne une information : un quizz contient 7 questions.
 
Non, à la place, tu fais :
 
utilisateur_id
question_num
resultat
 
Là, t'as plus d'information. Et mieux, tu peux maintenant avoir autant de questions que du veux dans ton quizz.
 
Le second modèle n'est pas moins dénué de sens que le premier. Au contraire. Par contre, il est dépourvu d'information.

n°1487324
leflos5
On est ou on est pas :)
Posté le 06-12-2006 à 16:01:23  profilanswer
 

MagicBuzz a écrit :

j'ai pas dit que le modèle n'avait pas de sens, j'ai dit qu'il était dénué d'information.
 
par exemple, t'as une table "quizz_résultat".
 
en aucun cas il ne faut avoir les colonnes :
 
utilisateur_id
resultat_question_1
resultat_question_2
resultat_question_3
resultat_question_4
resultat_question_5
resultat_question_6
resultat_question_7
 
Car ici, ton modèle donne une information : un quizz contient 7 questions.
 
Non, à la place, tu fais :
 
utilisateur_id
question_num
resultat
 
Là, t'as plus d'information. Et mieux, tu peux maintenant avoir autant de questions que du veux dans ton quizz.
 
Le second modèle n'est pas moins dénué de sens que le premier. Au contraire. Par contre, il est dépourvu d'information.


Entièrement d'accord, celà dit dans certains cas, donner une info peut être utile quand même, bien entendu pas pour faire ça ;)

n°1487405
sircam
I Like Trains
Posté le 06-12-2006 à 17:03:01  profilanswer
 

leflos5 a écrit :

Entièrement d'accord, celà dit dans certains cas, donner une info peut être utile quand même, bien entendu pas pour faire ça ;)


Fais voir ton cas pratique, alors.  [:airforceone]
 
Je viens de coder en JDBC ce dont tu parles il y a qq heures, mais si je ne connais pas le nom des colonnes, c'est parce que je dois exécuter le contenu d'un fichier SQL arbitraire, pour un outil purement technique. Si tu commences à discriminer les colonnes, ça sent l'information fonctionnelle...
 
Ceci dit, le contre-exemple de MagicBuzz n'est pas tout à fait pertinent/convaincant. Il arrive parfois que l'on fige champs_1, champs_2 sans passer par une table supplémentaire, parce qu'on a que deux valeurs à stocker dans tous les cas, et parce qu'on est fat ou qu'on a la c0wb0y attitude.. 2 ou 3 champs, disons. Bon, au delà, effectivement, ça commence à sentir l'excès de paresse, et ça ne va plus très bien quand on commence à tenter des "select champs*" dynamiques sur des colonnes a priori pas connues comme le veut leflo...
 
Faut voir, ça peut rester justifiable mais on n'en sait pas plus sur le cas d'espèce.
 
[:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1487434
MagicBuzz
Posté le 06-12-2006 à 17:18:37  profilanswer
 

ben c'est sûr que pour une application de gestion de famille, tu vas pas faire "parent_sexe / parent_id" mais "père / mère" :spamafote:
 
ensuite, la dénormalisation intervient surtout dans l'étude des performances et de l'utilisation de la base. par contre, elle ne doit jamais être faite du premier abords.

mood
Publicité
Posté le 06-12-2006 à 17:18:37  profilanswer
 

n°1487454
sircam
I Like Trains
Posté le 06-12-2006 à 17:30:03  profilanswer
 

MagicBuzz a écrit :

ben c'est sûr que pour une application de gestion de famille, tu vas pas faire "parent_sexe / parent_id" mais "père / mère" :spamafote:
 
ensuite, la dénormalisation intervient surtout dans l'étude des performances et de l'utilisation de la base. par contre, elle ne doit jamais être faite du premier abords.


Premier abord = schema logique. Si tu y consacres du temps. Dans la vraie vie, c'est souvent une chimère. Au delà, c'est à dire au stade "physique", je me casserais pas la tête avec les cas simples. Dans la pratique, faut pas forcément attendre des questions de perf pour dénormaliser. Si je reprends ton exemple supra, je me vois mal prendre la solution normalisée, même pour une application enterprise, même en l'absence de contraintes de perf.
 
Bien sûr, faut éviter les trucs à la con genre "telephone1" et "telephone2" des applis à la années 90, ou tu pestais bien fort dès que tu devais stocker un 3è numéro. Encore que si on est trop limite que pour implémenter n numéros dans le UI, ça vaut peut-être pas la peine de se tracasser pour la DB.
 
'fin bon, on parle de cas triviaux là. Dès que ça devient un peu sérieux, on se la joue plus strict. J'espère.  [:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1487500
MagicBuzz
Posté le 06-12-2006 à 17:55:26  profilanswer
 

L'ERP sur lequel je travaille utilise énormément l'astuce que j'ai donné pour dématérialiser les tables.
et c'est hyper pratique.
 
genre j'ai un fauteuil. je veux dire que le bas de caisse est en chêne, les cousins en mousse condensée, le revêtement des cousons en tissus machin et les accoudoirs en cuirs.
 
j'ai le choix entre créer 4 champs, avec 4 tables de correspondances, et être emmerdé le jour où mon produit n'est plus un canapé mais une bougie (là j'aurais d'autres propriétés), ou utiliser ce système qui permet d'associer n propriétés à mon produit, dont les valeurs possibles sont toutes présentes dans une "table fourre tout" identifiés par un code "table".
 
ce système, en clair, pour une baisse de performances très faible (voir même un gain puisqu'on a moins de table de correspondances), permet de stocker tout et n'importe quoi au gré des désirs de l'utilisateur. et surtout, via une interface très simple et générique, on peut permettre à l'utilisateur de créer ses propres propriétés avec leurs tables de correspondances associées, sans jamais toucher au modèle.

n°1487847
polo021
Posté le 07-12-2006 à 11:15:03  profilanswer
 

Pure hypothese : ce ne serait pas possible d'aller chercher le nom des colonnes dans une table systeme du genre SYSTABLE where TABLE = matable?

n°1487853
MagicBuzz
Posté le 07-12-2006 à 11:21:23  profilanswer
 

si, parfaitement. mais ensuite en pur SQL il sera impossible de générer une requête à la volée à partir de ça.

n°1487909
sircam
I Like Trains
Posté le 07-12-2006 à 12:41:55  profilanswer
 


Forcément, s'il s'agit de stocker aussi bien des fauteuils que de la crème pour visage, on parle d'autre chose :o
 
C'est un cas à part où les meta-data (les caractéristiques qui nous intéressent) constituent des données en elles-mêmes. Avec un ERP, on tombe dans ce cas de figure. Une personne par exemple peut avoir un nombre indéfini de caractéristiques auxquelles on s'interesse ou non, et on reporte sur l'applicatif une partie de ce que la structure de DB nous donnait dans un modèle plus académique... Y'a rien de mal à ça. :o
 
polo> Oui, tu peux tout faire, mais la question est celle de la portabilité et de l'usage que tu veux en faire. Tout dépend du contexte. Si tu utilises SYSTABLE en JDBC par exemple, c'est la pelle à clous, parce qu'il y a nettement plus adapté. Si par contre tu es sur un client SQLDev, ce n'est pas sale.   [:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}

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

  select sur toutes les colonnes commençant par un certain mot

 

Sujets relatifs
Mettre des lignes en colonnesJavascript + Liste déroulante <select>
changer focus d'un select en fonction choix autre selectAjouer une Colonne ID juste avec le SELECT
Récupèration contenu d'un select (HTML, PHP)création dynamique de nouvelles colonnes d'un listview
Résolu - Effacer des champs dans des tables à partir d'un selectprobléme de select sous FF
faire un select distinct radomselect -> option : disabled ?
Plus de sujets relatifs à : select sur toutes les colonnes commençant par un certain mot


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