trouver une chaine dans un champ

Invité
Invité n'ayant pas de compte PHPfrance

13 janv. 2009, 16:43

Bonjour à tous,

Comment faire en sql si une chaine de caractères existe bien dans un champ?
Par exemple, voici le contenu d'un champ "marques"

renault,citroen,ford,mercedes

Comment vérifier si la chaine "ford" existe bien dans le champ"?
Je connais la clause LIKE mais elle ne cherche pas une correspondance stricte, plutôt une ressemblance.

Merci pour vos réponses.

ViPHP
ViPHP | 3607 Messages

13 janv. 2009, 17:41

C'est pas très clair...
Si tu ne veux pas de LIKE alors utilise "="...
Ton champs contient plusieurs marques à la fois?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 janv. 2009, 18:28

Je connais la clause LIKE mais elle ne cherche pas une correspondance stricte, plutôt une ressemblance.
Vi, c'est vrai que la fonction LIKE aime bien retrouver d'autres enregistrements que ceux attendus, parce qu'ils lui rappellent vaguement quelque chose qui pourrait potentiellement ressembler à ce que toi tu pourrais attendre... ;)

Plus sérieusement, si tu veux une correspondance stricte, c'est effectivement l'opérateur "=" qu'il te faut utiliser, mais dans ce cas il te faut tester si l'enregistrement en base correspond strictement à la valeur "renault,citroen,ford,mercedes" et pas savoir s'il peut contenir la chaine "ford".

L'opérateur LIKE te permet de spécifier une partie de la chaine recherchée en remplaçant les parties de la chaine que tu ne connais pas par un joker. Elle convient donc tout à fait dans ton cas et te retourne tous les enregistrements qui respectent ton masque (et pas ceux n'ayant qu'une vague ressemblance avec celui-ci ;)).

Code : Tout sélectionner

SELECT ... FROM ... WHERE marques LIKE '%ford%'
Te retourne tous les enregistrements qui contiennent la chaine "ford".

Au pire, la "ressemblance" pourrait être liée à la casse des lettres, chose que tu peux forcer en changeant le type de champ ou en spécifiant qu'il s'agit d'une chaine binaire :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 5924 Messages

13 janv. 2009, 18:31

Sinon ca te dit pas une base bien modélisée avec une table à part pour les marques ?

ViPHP
AB
ViPHP | 5818 Messages

13 janv. 2009, 21:47

Sinon ca te dit pas une base bien modélisée avec une table à part pour les marques ?
+1
Si c'est encore possible, faudrait sérieusement y penser :wink: