Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment recuperer mots recherché dans formulaire pour recherche mysql ??????

1 réponse
Avatar
Hacavie
Bonjour,

je suis en train de developper un moteur de recherche pour une base de
données d'environ 8000 produits.

Après beaucoup de mal, j'ai enfin une recherche qui fonctionne correctement
et assez rapidement (grâce a un affichage par page en autres).

Il me reste encore un problème par contre, actuellement mon formulaire de
recherche utilise deux champs de formulaire pour rechercher sur un ou deux
mots clés.

Je voudrais n'en laisser qu'un et que l'utilisateur puisse y saisir un ou
plusieurs mots clés (style google) mais j'ai beaucoup de mal malgré mes
recherches sur les newsgroups et après avoir vu différents scripts ...

Dans tous les scripts que j'ai vu, il utilise la vriable retourné par le
formulaire après un like comme ceci '.$toto' mais pas moyen de la faire. Il
faut aussi que j'utilise les % dans le like.

ma recherche actuel ressemble un peu à ça :
------------------------------------------------------------
select nom, prix ...
from produit,fabricant ...
where upper('index.nom') like '$rech"
and upper('index.nom') like '$rech2"
...
-------------------------------------------------------------

Je sais que c'est utilisé couramment et certainement très simple mais je
rame ... alors si quelqu'un pouvait prendre un peu de son temps pour me
l'expliquer, ce serait très sympa.

Yann Bertel

1 réponse

Avatar
Michaël
Le 20.11.2003 11:02, Hacavie a écrit :
Je voudrais n'en laisser qu'un et que l'utilisateur puisse y saisir un ou
plusieurs mots clés (style google) mais j'ai beaucoup de mal malgré mes
recherches sur les newsgroups et après avoir vu différents scripts ...



Salut,

Quand un utilisateur saisie des mots clefs, généralement, il les sépare par des
blancs ou des '+'. Quand il veut une expression complète, il encadre les mots
avec des ".

C'est pas bien compliqué de récupérer le champs du formulaire et vérifier s'il y
a des blancs, des '+' ou des ". En fonction du résultat tu vas construire ta
requête.


ma recherche actuel ressemble un peu à ça :
------------------------------------------------------------
select nom, prix ...
from produit,fabricant ...
where upper('index.nom') like '$rech"
and upper('index.nom') like '$rech2"
...
-------------------------------------------------------------



Il y a des petites erreurs dans ta requête.

Déjà, il n'y a pas de jointure entre les tables "produit" et "fabricant". Tu vas
te payer un beau produit cartésien :-) (c'était peut être qu'un extrait de ta
requête ...)

Ensuite, dans la clause WHERE, si tu utilises le même nom de champs dans une
même table, il faut faire un OR logique et non pas un AND. De plus, le LIKE est
trop restrictif, il faut élargir le pattern de recherche en rajoutant des '%'
entre les variables $rech.

Si tu as déclaré ton champ de recherche en varchar standard, il n'est pas
case-sensitive, donc, pas besoin d'utiliser la fonction "upper" qui te fera
perdre l'avantage de l'index (si il y en a un).

La requête pourrait être celle-ci (on va se limiter à une seule table) :

SELECT nom, prix
FROM produit
WHERE nom LIKE '%$rech%' OR nom LIKE '%$rech2%';

D'autres fonctions existent pour faire de la recherche dans les chaînes de
caractères (REGEXP, ou alors le FULLTEXT SEARCH). Je t'invite à potasser la doc
MySQL sur le sujet :

http://www.mysql.com/documentation/mysql/bychapter/manual_Reference.html#String_functions
&
http://www.mysql.com/documentation/mysql/bychapter/manual_Reference.html#Fulltext_Search

Cdt,
Michaël