OVH Cloud OVH Cloud

Plusieurs valeurs dans la meme colonne

3 réponses
Avatar
Kakid
Salut tout le monde, voilà j'ai une petite question dont je n'arrive pas a
trouer la solution :
j'utilise une colonne pour stocker différentes valeurs, l'utilisateur a la
possibilités d'en choisir plusieurs valeurs parmi : A B C D E F , dans la
colonne les informations sont séparées des virgules.
Supposant 3 Utilisateurs u1, u2, u3
u1 choisi A B D , dans la table on aura colonne 1 : u1 - colonne 2 : A,B,D
u2 choisi B C F , dans la table on aura colonne 1 : u2 - colonne 2 : B,C,F
u3 choisi A B F , dans la table no aura colonne 1 : u3 - colonne 2 : A,B,F
ce que je voudrais faire c'est une procédure stocké en TSql qui prend comme
paramètre une donnée inséré ( F par exemple ) et elle retourne en résultat
les noms des utilisateurs qui on insérer cette donnée (u2 et u3 dans ce cas)
Je travail sous Sql Server 2005
Merci d'avance

3 réponses

Avatar
Christophe
Je pense que le mieux serait si ton nombre de champ est fixe de faire des
champs A, B, C, D etc en boolean par exemple
sinon en core le mieux c'est du referenciel
une table utilisateur et une table liée avec autant de resultats que le
choix des utilisateurs.

TABLE A
ID, NOM, PRENOM etc...


TABLE B
ID, ID_A, VAL
1, u1, A
2, u1, B
3,u1, D
4, u2, B
5, u2, C
6,u2, F
7, u2, A
8, u2, B
9,u2, F



Apres un simple Select
Select * from TABLE_B
Where VAL = 'F'


tu aura tout les id utilisateurs
Sinon dans ton cas tu peux utiliser le like '%F%'
mais c'est juste pour depanner et pas tres propre ni performant.

Select * from maTable where monchamp like '%F%'

Ch.




"Kakid" a écrit dans le message de
news:
Salut tout le monde, voilà j'ai une petite question dont je n'arrive pas a
trouer la solution :
j'utilise une colonne pour stocker différentes valeurs, l'utilisateur a la
possibilités d'en choisir plusieurs valeurs parmi : A B C D E F , dans la
colonne les informations sont séparées des virgules.
Supposant 3 Utilisateurs u1, u2, u3
u1 choisi A B D , dans la table on aura colonne 1 : u1 - colonne 2 : A,B,D
u2 choisi B C F , dans la table on aura colonne 1 : u2 - colonne 2 : B,C,F
u3 choisi A B F , dans la table no aura colonne 1 : u3 - colonne 2 : A,B,F
ce que je voudrais faire c'est une procédure stocké en TSql qui prend


comme
paramètre une donnée inséré ( F par exemple ) et elle retourne en résultat
les noms des utilisateurs qui on insérer cette donnée (u2 et u3 dans ce


cas)
Je travail sous Sql Server 2005
Merci d'avance




Avatar
Patrice
Par exemple quelque chose comme MesValeurs LIKE '%'+@Car+'%'

Plus généralement :
','+MesValeurs+',' LIKE '%,'+@Car+',%' (sinon la forme 1 pourra poser
problème pour A,BC,CD,X par exemple avec une recherche sur C)

Ceci dit ma préférence personnelle serait sans doute de ne pas utiliser des
champs "multivalués" mais d'avoir une table fille dont chaque ligne stocke
l'une des valeurs choisis par un utilisateur...
--
Patrice

"Kakid" a écrit dans le message de news:

Salut tout le monde, voilà j'ai une petite question dont je n'arrive pas a
trouer la solution :
j'utilise une colonne pour stocker différentes valeurs, l'utilisateur a la
possibilités d'en choisir plusieurs valeurs parmi : A B C D E F , dans la
colonne les informations sont séparées des virgules.
Supposant 3 Utilisateurs u1, u2, u3
u1 choisi A B D , dans la table on aura colonne 1 : u1 - colonne 2 : A,B,D
u2 choisi B C F , dans la table on aura colonne 1 : u2 - colonne 2 : B,C,F
u3 choisi A B F , dans la table no aura colonne 1 : u3 - colonne 2 : A,B,F
ce que je voudrais faire c'est une procédure stocké en TSql qui prend
comme paramètre une donnée inséré ( F par exemple ) et elle retourne en
résultat les noms des utilisateurs qui on insérer cette donnée (u2 et u3
dans ce cas)
Je travail sous Sql Server 2005
Merci d'avance




Avatar
Kakid
Merci beaucoup Christophe et Patrice, je vais enmployer la seconde méthode
celle de la table fille,
Merci encore
Cordialement

"Patrice" a écrit dans le message de news:

Par exemple quelque chose comme MesValeurs LIKE '%'+@Car+'%'

Plus généralement :
','+MesValeurs+',' LIKE '%,'+@Car+',%' (sinon la forme 1 pourra poser
problème pour A,BC,CD,X par exemple avec une recherche sur C)

Ceci dit ma préférence personnelle serait sans doute de ne pas utiliser
des champs "multivalués" mais d'avoir une table fille dont chaque ligne
stocke l'une des valeurs choisis par un utilisateur...
--
Patrice

"Kakid" a écrit dans le message de news:

Salut tout le monde, voilà j'ai une petite question dont je n'arrive pas
a trouer la solution :
j'utilise une colonne pour stocker différentes valeurs, l'utilisateur a
la possibilités d'en choisir plusieurs valeurs parmi : A B C D E F , dans
la colonne les informations sont séparées des virgules.
Supposant 3 Utilisateurs u1, u2, u3
u1 choisi A B D , dans la table on aura colonne 1 : u1 - colonne 2 :
A,B,D
u2 choisi B C F , dans la table on aura colonne 1 : u2 - colonne 2 :
B,C,F
u3 choisi A B F , dans la table no aura colonne 1 : u3 - colonne 2 :
A,B,F
ce que je voudrais faire c'est une procédure stocké en TSql qui prend
comme paramètre une donnée inséré ( F par exemple ) et elle retourne en
résultat les noms des utilisateurs qui on insérer cette donnée (u2 et u3
dans ce cas)
Je travail sous Sql Server 2005
Merci d'avance