Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/06/2011, 11h48   #1
Membre régulier
 
Avatar de Netek
 
Homme Damien Gros
Développeur Web
Inscription : mars 2011
Messages : 58
Détails du profil
Informations personnelles :
Nom : Homme Damien Gros
Âge : 25
Localisation : France, Gard (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2011
Messages : 58
Points : 73
Points : 73
Envoyer un message via MSN à Netek
Par défaut Clause "IN" avec un champ

Bonjour à tous,
Le titre n'est peut être pas bien clair alors je m'explique.
Dans ma table j'ai un champ Liste (VARCHAR) qui contient des données sous cette forme : 1,5,23,45
Je souhaite faire une requête sur cette table pour me retourner toutes les lignes ou il y a (par exemple) 5 dans le champ Liste.
J'ai fait ca :
Code :
SELECT * FROM ma_table WHERE '5' IN(Liste)
Mais ca ne marche pas. Il n'y a pas d'erreur de syntaxe mais ca ne retourne rien.
Existe t-il donc un moyen de faire ce dont j'ai besoin ?

Merci d'avance
Netek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 11h54   #2
Membre régulier
 
Avatar de Netek
 
Homme Damien Gros
Développeur Web
Inscription : mars 2011
Messages : 58
Détails du profil
Informations personnelles :
Nom : Homme Damien Gros
Âge : 25
Localisation : France, Gard (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2011
Messages : 58
Points : 73
Points : 73
Envoyer un message via MSN à Netek
Ok je me répond tout seul !
Bien entendu qu'on peut le faire ! Il suffit d'utiliser la clause "LIKE"

Code :
SELECT * FROM ma_table WHERE Liste LIKE '%5%'
J'était resté focalisé sur le IN ...

Merci
Netek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 11h55   #3
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
Bonjour,

Il y a un problème de modélisation... Il faudrait une table Liste enregistrant une valeur par ligne, et non pas un champ Liste avec des valeurs séparées par virgules. On voit bien, dès lors qu'on recherche une valeur, le problème que pose un champ ainsi constitué.
Heureusement pour toi, il existe une fonction sous MySQL (propre à MySQL) qui peut t'aider : FIND_IN_SET :
Citation:
FIND_IN_SET(str,strlist)

Retourne une valeur de 1 à N si la chaîne str se trouve dans la liste strlist constituée de N chaînes. Une liste de chaîne est une chaîne composée de sous-chaînes séparées par une virgule ‘,’. Si le premier argument est une chaîne constante et le second, une colonne de type SET, la fonction FIND_IN_SET() est optimisée pour utiliser une recherche binaire très rapide. Retourne 0 si str n'est pas trouvé dans la liste strlist ou si la liste strlist est une chaîne vide. Retourne NULL si l'un des arguments est NULL. Cette fonction ne fonctionne pas correctement si le premier argument contient une virgule ‘,’
ced
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 11h57   #4
Membre régulier
 
Avatar de Netek
 
Homme Damien Gros
Développeur Web
Inscription : mars 2011
Messages : 58
Détails du profil
Informations personnelles :
Nom : Homme Damien Gros
Âge : 25
Localisation : France, Gard (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2011
Messages : 58
Points : 73
Points : 73
Envoyer un message via MSN à Netek
Merci pour ta réponse, je vais voir ce que donne cette clause
Netek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 11h58   #5
ced
Rédacteur/Modérateur

 
Avatar de ced
 
Homme Cédric Duprez
Inscription : avril 2002
Messages : 3 823
Détails du profil
Informations personnelles :
Nom : Homme Cédric Duprez
Âge : 36
Localisation : France, Loiret (Centre)

Informations professionnelles :
Secteur : Agroalimentaire - Agriculture

Informations forums :
Inscription : avril 2002
Messages : 3 823
Points : 6 440
Points : 6 440
Citation:
Envoyé par Netek Voir le message
Ok je me répond tout seul !
Bien entendu qu'on peut le faire ! Il suffit d'utiliser la clause "LIKE"

Code :
SELECT * FROM ma_table WHERE Liste LIKE '%5%'
J'était resté focalisé sur le IN ...

Merci
Euh là, ça va renvoyer également la valeur 15 ou la valeur 35... C'est bien ce que tu veux ?
__________________
Rédacteur / Modérateur SGBD
Mes tutoriels et la FAQ MySQL

----------------------------------------------------
Pensez aux balises code et au tag
Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
ced est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2011, 11h59   #6
Membre régulier
 
Avatar de Netek
 
Homme Damien Gros
Développeur Web
Inscription : mars 2011
Messages : 58
Détails du profil
Informations personnelles :
Nom : Homme Damien Gros
Âge : 25
Localisation : France, Gard (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mars 2011
Messages : 58
Points : 73
Points : 73
Envoyer un message via MSN à Netek
Oui en effet ... décidément je suis pas bien réveillé :p
Netek est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h57.


 
 
 
 
Partenaires

Hébergement Web