Je dois construire un formulaire de recherche et je rencontre quelques problèmes.
J'ai un formulaire de recherche avec 5 textbox pour les mots clés. La recherche se fait sur un champ d'une table mysql.
- Je cherche un moyen de trouver les enregistrements de la table contenant exactement les mots recherchés et non pas les mots contenant le ou les mots clés. Ex. si je recherche le mot "mal", je ne veux pas "maladie". J'avais dans mon code : WHERE ligne LIKE '%".$data."%' mais "maladie" est trouvé. Si j'ajoute des espace entre les %% et que la phrase commence ou termine par mon mot clé, le système ne le trouve pas.
- Aussi, je veux accepter les apostrophes dans les mots clés, exemple, "p'tit", "t'sais" mais avec la ligne : preg_match("#\b(".$frm_keywords.")\b#i", $ligne), le système n'accepte pas l'apostrophe. Le $frm_keywords est la concaténation des mots clés du formulaire avec des pipes ( | ) entre chaque mot.
Donc, si vous avez une idée ou des exemples pour pouvoir m'aider,¸j'apprécierais grandement.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Olivier Miakinen
Bonjour,
Le 03/06/2009 23:13, bobino75 a écrit :
- Je cherche un moyen de trouver les enregistrements de la table contenant exactement les mots recherchés et non pas les mots contenant le ou les mots clés. Ex. si je recherche le mot "mal", je ne veux pas "maladie". J'avais dans mon code : WHERE ligne LIKE '%".$data."%' mais "maladie" est trouvé. Si j'ajoute des espace entre les %% et que la phrase commence ou termine par mon mot clé, le système ne le trouve pas.
Là c'est plutôt une question pour f.c.a.sgbd que pour f.c.l.php. Cela dit, je ne connais rien à la syntaxe SQL, mais si la concaténation se fait avec « + » tu peux essayer un truc du genre : WHERE ' '+ligne+' ' LIKE '% $data %'
En d'autres termes, tu cherches ton mot entre deux espaces, dans un champ que tu as lui-même augmenté de deux espaces, une au début et une à la fin.
- Aussi, je veux accepter les apostrophes dans les mots clés, exemple, "p'tit", "t'sais" mais avec la ligne : preg_match("#b(".$frm_keywords.")b#i", $ligne), le système n'accepte pas l'apostrophe. Le $frm_keywords est la concaténation des mots clés du formulaire avec des pipes ( | ) entre chaque mot.
J'ai une question idiote, pardonne-moi de la poser : tu es sûr que tu as bien « p'tit » dans $frm_keywords et pas, par exemple, « p'tit » ?
Cordialement, -- Olivier Miakinen
Bonjour,
Le 03/06/2009 23:13, bobino75 a écrit :
- Je cherche un moyen de trouver les enregistrements de la table contenant
exactement les mots recherchés et non pas les mots contenant le ou les mots
clés. Ex. si je recherche le mot "mal", je ne veux pas "maladie". J'avais dans
mon code : WHERE ligne LIKE '%".$data."%' mais "maladie" est trouvé. Si j'ajoute
des espace entre les %% et que la phrase commence ou termine par mon mot clé, le
système ne le trouve pas.
Là c'est plutôt une question pour f.c.a.sgbd que pour f.c.l.php. Cela
dit, je ne connais rien à la syntaxe SQL, mais si la concaténation se
fait avec « + » tu peux essayer un truc du genre :
WHERE ' '+ligne+' ' LIKE '% $data %'
En d'autres termes, tu cherches ton mot entre deux espaces, dans un
champ que tu as lui-même augmenté de deux espaces, une au début et une
à la fin.
- Aussi, je veux accepter les apostrophes dans les mots clés, exemple, "p'tit",
"t'sais" mais avec la ligne : preg_match("#b(".$frm_keywords.")b#i", $ligne),
le système n'accepte pas l'apostrophe. Le $frm_keywords est la concaténation des
mots clés du formulaire avec des pipes ( | ) entre chaque mot.
J'ai une question idiote, pardonne-moi de la poser : tu es sûr que tu as
bien « p'tit » dans $frm_keywords et pas, par exemple, « p'tit » ?
- Je cherche un moyen de trouver les enregistrements de la table contenant exactement les mots recherchés et non pas les mots contenant le ou les mots clés. Ex. si je recherche le mot "mal", je ne veux pas "maladie". J'avais dans mon code : WHERE ligne LIKE '%".$data."%' mais "maladie" est trouvé. Si j'ajoute des espace entre les %% et que la phrase commence ou termine par mon mot clé, le système ne le trouve pas.
Là c'est plutôt une question pour f.c.a.sgbd que pour f.c.l.php. Cela dit, je ne connais rien à la syntaxe SQL, mais si la concaténation se fait avec « + » tu peux essayer un truc du genre : WHERE ' '+ligne+' ' LIKE '% $data %'
En d'autres termes, tu cherches ton mot entre deux espaces, dans un champ que tu as lui-même augmenté de deux espaces, une au début et une à la fin.
- Aussi, je veux accepter les apostrophes dans les mots clés, exemple, "p'tit", "t'sais" mais avec la ligne : preg_match("#b(".$frm_keywords.")b#i", $ligne), le système n'accepte pas l'apostrophe. Le $frm_keywords est la concaténation des mots clés du formulaire avec des pipes ( | ) entre chaque mot.
J'ai une question idiote, pardonne-moi de la poser : tu es sûr que tu as bien « p'tit » dans $frm_keywords et pas, par exemple, « p'tit » ?
Cordialement, -- Olivier Miakinen
Michael DENIS
bobino75 a écrit :
WHERE ligne LIKE '%".$data."%' mais "maladie" est trouvé.
Normal, le "%" est un joker qui remplace zéro ou plusieurs caractères. Si vous voulez trouver un champ qui contient _uniquement_ "mal", il vous faut :
WHERE ligne LIKE $data
- Aussi, je veux accepter les apostrophes dans les mots clés, exemple, "p'tit", "t'sais" mais avec la ligne : preg_match("#b(".$frm_keywords.")b#i", $ligne), le système n'accepte pas l'apostrophe. Le $frm_keywords est la concaténation des mots clés du formulaire avec des pipes ( | ) entre chaque mot.
La réponse d'Olivier me parait une bonne orientation pour les recherches.
-- Michaël DENIS
bobino75 a écrit :
WHERE ligne LIKE '%".$data."%' mais "maladie" est trouvé.
Normal, le "%" est un joker qui remplace zéro ou plusieurs caractères.
Si vous voulez trouver un champ qui contient _uniquement_ "mal", il vous
faut :
WHERE ligne LIKE $data
- Aussi, je veux accepter les apostrophes dans les mots clés, exemple, "p'tit",
"t'sais" mais avec la ligne : preg_match("#b(".$frm_keywords.")b#i", $ligne),
le système n'accepte pas l'apostrophe. Le $frm_keywords est la concaténation des
mots clés du formulaire avec des pipes ( | ) entre chaque mot.
La réponse d'Olivier me parait une bonne orientation pour les recherches.
WHERE ligne LIKE '%".$data."%' mais "maladie" est trouvé.
Normal, le "%" est un joker qui remplace zéro ou plusieurs caractères. Si vous voulez trouver un champ qui contient _uniquement_ "mal", il vous faut :
WHERE ligne LIKE $data
- Aussi, je veux accepter les apostrophes dans les mots clés, exemple, "p'tit", "t'sais" mais avec la ligne : preg_match("#b(".$frm_keywords.")b#i", $ligne), le système n'accepte pas l'apostrophe. Le $frm_keywords est la concaténation des mots clés du formulaire avec des pipes ( | ) entre chaque mot.
La réponse d'Olivier me parait une bonne orientation pour les recherches.