Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
986 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  condition where : recherche par mot clé

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

condition where : recherche par mot clé

n°1758541
welcominh
Posté le 11-07-2008 à 16:04:56  profilanswer
 

Bonjour à tous, mon problème touche à un peu de php. A déplacer si nécessaire ;)
 
J'ai un formulaire de recherche qui permet de rechercher dans une table. Or dans le champ on peut taper des mots clé comme bon nous semble. (séparés par des espaces)
La requete simple serait:

Code :
  1. select * from table1 where nom like '%$mots_cles%'


Existe-il un moyen d'obtenir l'équivalent du résultat:

Code :
  1. select * from table1 where nom like '%$mot_cle1%' and nom like '%$mot_cle2%' and nom like '%$mot_cle3%' ...


autrement qu'en "explodant" les mots clés en PHP avec comme caractère séparateur l'espace et en construisant en conséquence dynamiquement la condition de ma requete?
 
En fait je cherche un moyen plus simple et compact d'arriver à ce résultat. (même si ce n'est pas bien dur non plus).


Message édité par welcominh le 11-07-2008 à 16:05:46

---------------
Direct-download.com, le moteur de recherche pour Mega
mood
Publicité
Posté le 11-07-2008 à 16:04:56  profilanswer
 

n°1758545
flo850
moi je
Posté le 11-07-2008 à 16:09:18  profilanswer
 

tu as regardé du cote de MATCH ?


---------------

n°1758548
welcominh
Posté le 11-07-2008 à 16:12:28  profilanswer
 

réponse: non :)
Je vais voir ca de plus près merci :)


---------------
Direct-download.com, le moteur de recherche pour Mega
n°1761284
slr56
Tout problème a sa solution.
Posté le 18-07-2008 à 10:32:52  profilanswer
 

selon moi le plus simple serait d'utiliser le IN :

 

select * from table1 where nom IN (valeur1,valeur2,valeur3...);

 

tu peux peut-être y ajouter le signe % si tu recherches une valeur dans une chaine. A essayer.


Message édité par slr56 le 18-07-2008 à 10:33:12
n°1761306
welcominh
Posté le 18-07-2008 à 10:56:03  profilanswer
 

Je viens d'essayer. Ca ne marche pas avec le joker %. Si je ne me trompe pas, le IN compare des valeurs exactes et le joker % ne fonctionne qu'avec le LIKE. (pas sur à 100% pour ce dernier).
 
En tout cas, j'ai réalisé ma requete avec MATCH. C'est pile poil ce qu'il me fallait. Je ne connaissais pas cette fonction et c'est vraiment terrible  :love:. Je peux jouer sur quelques opérateurs pour faire jouer la pertinence, même si je ne m'en sers pas trop. Mais c'est trop fort.
 
Ouais c'est trop fort. J'l'ai pas déja dit?  :D


---------------
Direct-download.com, le moteur de recherche pour Mega
n°1767643
welcominh
Posté le 01-08-2008 à 10:06:43  profilanswer
 

Il y a un inconvénient apparemment avec le match, c'est qu'il n'inclut apparemment pas le comportement du like '%...%'.
Ce qui veut dire que quand j'ai match(nom) against('chevalier'), j'obtiens seulement les lignes ou il y a le mot chevalier dans le nom, séparé par des espaces. Par exemple je n'obtiens pas les lignes dont le nom est "les_chevaliers_du_zodiaque".
 
Y-a-t-il une solution pour inclure ce comportement? (je n'ai pas trouvé ca en tout cas) Car comme ca de tete, je ne vois que la solution de faire un UNION avec une 2e requete like '%...%'.
 
Merci beaucoup.


---------------
Direct-download.com, le moteur de recherche pour Mega
n°1767661
MagicBuzz
Posté le 01-08-2008 à 10:25:20  profilanswer
 

la réponse se situe dans le post de flo850.
 
il n'y en a pas de meilleure, le like est juste un test pour savoir si le cerveau de l'utilisateur est en état de marche ou pas. l'utiliser pour ce genre de recherches est une preuve qu'il ne marche pas du tout :o

n°1767673
welcominh
Posté le 01-08-2008 à 10:45:01  profilanswer
 

En fait, je ne décide pas de comment est rempli le champ nom. Pour des raisons de pertinence des résultats, je dois aussi récupérer les lignes qui  vérifient le like '%..%'. Du coup, je ne pense pas pouvoir m'en passer :/


---------------
Direct-download.com, le moteur de recherche pour Mega
n°1767676
MagicBuzz
Posté le 01-08-2008 à 10:46:52  profilanswer
 

si, en lisant la réponse de flo850...
 
(/me vient de relire tout le topic en fait, et aurait du commencer par là :ange:)
 
ben là c'est rapé.
 
d'un autre côté c'est bien d'ajouter des contraintes de ce genre, ça oblige les gens qui parlent le leetas ou le sms à faire un effort au risque de ne jamais être lus :p
 
et il n'est pas pertinant de retourner des résultats illisibles selon moi.


Message édité par MagicBuzz le 01-08-2008 à 10:49:27
n°1767685
welcominh
Posté le 01-08-2008 à 10:58:18  profilanswer
 

Pour te répondre, il n'y a pas vraiment besoin d'écrire sms pour ne pas obtenir de résultat. Le visiteur lambda tapera par exemple "guide du routard". Objectivement ce n'est pas mauvais comme recherche je trouve. Par contre, pas mal de résultats ne sortiront pas car le nom sera de la forme "guide_routard" ou alors "routard_le_guide".

 

Donc si je comprends bien, pas de solution propre apparemment. Je vais devoir bidouiller un peu  :D


Message édité par welcominh le 01-08-2008 à 11:29:01

---------------
Direct-download.com, le moteur de recherche pour Mega
mood
Publicité
Posté le 01-08-2008 à 10:58:18  profilanswer
 

n°1767689
MagicBuzz
Posté le 01-08-2008 à 11:03:51  profilanswer
 

match ne recherche pas forcément TOUS les termes. donc ton fichier devrait ressortir si tu recherches une phrase contenant au moins un mot contenu dans ton match.
 
d'autant que tu peux parfaitement faire un match(premier mot) or match(second mot), etc. mais aussi jouer avec les weight, near, etc.
 
(et accessoirement, il n'y a pas que match comme instruction pour la recherche littérale)
 
par contre, pas sûr que mysql reconnaisse le _ comme une ponctuation. j'imagine que c'est paramétrage cependant
 
et je regrette, les gens qui noment leurs fichiers pirate comme ça, ils méritent pas de vivre, on sait même pas les langues de la BO ni des SUB :o
 
c'est donc pas un résultat pertinant :p
(ps et change le nom de ton exemple douteux avant qu'un modo passe par là)


Message édité par MagicBuzz le 01-08-2008 à 11:07:26
n°1767717
welcominh
Posté le 01-08-2008 à 11:39:13  profilanswer
 

oui je savais que match ne recherchait pas tous les termes. Ce coté ci ne me pose pas de problème vu qu'on peut le faire ou non.
Ce qui pose problème c'est comme tu le soulignes le fait que mysql ne reconnaissent pas le _ comme séparateur. Apres oui c'est surement paramétrable, tout comme le nombre de lettres minimum d'un mot pour qu'il soit pris en compte par la recherche (4 par défaut, j'aimerais le passer à 3 voire 2). Du coup oui, c'est principalement pour des raisons de config (que je ne peux changer) que le match n'est pas appropriée à 100%. Je trouve cette fonction néanmoins très intéressante, et je la garde dans un coin.
 
Pour l'exemple que je t'ai donné (lol va voir en quoi j'ai renommé ca  [:aztechxx]), ce n'était qu'un exemple. Rassure toi il y a tout de même des noms bien formés. Mais parfois il s'agit de résultat unique. Moi aussi je trouve un peu moyen des noms comme cela, mais c'est quand même mieux d'avoir un résultat proche comme ca, que d'obtenir un gros "0 résultat"  :D
 
En attendant j'ai testé avec un like '%...%'. Ca marche plutot bien coté pertinence.


---------------
Direct-download.com, le moteur de recherche pour Mega
n°1767721
MagicBuzz
Posté le 01-08-2008 à 11:42:52  profilanswer
 

le principal souci du like, c'est que tu n'as pas le champ score en sortie qui te permet de faire un indice de pertinance :/
 
à la limite, je laisserais les deux requêtes : par défaut, "match" et une case à cochée "recherche merdique qui ramène plus de résultats qui n'ont rien à voir au bout de 4 heures et qui ne sont pas triés" ;)


Message édité par MagicBuzz le 01-08-2008 à 11:43:55
n°1767734
welcominh
Posté le 01-08-2008 à 11:50:33  profilanswer
 

Oui en effet, pas de score de pertinence...
Oui j'ai envisagé de laisser les 2. Mais pas avec une case à cocher.
Plutot une liste de résultats à la suite. (avec une indication sur le type de recherche pourquoi pas, je verrai comment je nommerai ca).

 

En tout cas merci pour ta contribution :)


Message édité par welcominh le 01-08-2008 à 11:51:30

---------------
Direct-download.com, le moteur de recherche pour Mega

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  condition where : recherche par mot clé

 

Sujets relatifs
[SQL server] Recherche sur champ calculéMacro Excel de recherche + concaténation
Recherche personne dans l'oiserecherche aide
Recherche de caractère dans un nom de fichier[RESOLU]Mise en forme conditionnelle 15 condition / différente cellule
[MYSQL] Clause WHERE foireuse ?recherche multicritere
arraylist : recherche performanteje recherche des charts gratuits pour vb.net
Plus de sujets relatifs à : condition where : recherche par mot clé


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR