Requête pour moteur de recherche REGEXP

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Requête pour moteur de recherche REGEXP

Re: Requête pour moteur de recherche REGEXP

par fab » 19 oct. 2009, 13:00

Sans doute oui :) Par contre ce que je pige pas c'est qu'avant de dire des bétises j'ai fais moi même les tests pour l'histoire d'accents et chez moi ça retournait bien tout :s

Re: Requête pour moteur de recherche REGEXP

par NewDeveloppeur » 19 oct. 2009, 12:54

Bon là y a plus de message d'erreur, mais ça agit comme REGEXP, quand je tape "mere" ça me retourne rien, quand je tape "mère" ça me retourne tout les enregistrement comportant la chaine "mère"...

Est-il vrai que LIKE est plus léger que REGEXP ?

Re: Requête pour moteur de recherche REGEXP

par fab » 19 oct. 2009, 00:07

Mon précédent message c'était n'importe quoi.. :s

$req  = 'SELECT * FROM articles WHERE texte LIKE "%'.$recherche.'%" ORDER BY id DESC LIMIT '.$premiereEntree.','.$messagesParPage;


$retour_messages = mysql_query($req) or die ("Erreur 0001 sur la page recherche.php".mysql_error());

Re: Requête pour moteur de recherche REGEXP

par NewDeveloppeur » 18 oct. 2009, 23:41

Non, apparemment ça affiche ce message :
Parse error: syntax error, unexpected '%' in /mnt/159/sdb/6/8/france.webmaster.fr/recherche.php on line 126
Même quand je fait addslashes à part, bon ça n'affiche pas d'érreur MAIS ça agit comme REGEXP :
$recherche = addslashes($recherche);

$retour_messages = mysql_query("SELECT * FROM articles WHERE texte LIKE '%".$recherche."%' ORDER BY id DESC LIMIT ".$premiereEntree.",".$messagesParPage."") or die ("Erreur 0001 sur la page recherche.php".mysql_error());

Re: Requête pour moteur de recherche REGEXP

par fab » 18 oct. 2009, 23:35

Essaye plutôt :
Code php
$retour_messages = mysql_query("SELECT * FROM articles WHERE texte LIKE '".%addslashes($recherche)%."' ORDER BY id DESC LIMIT ".$premiereEntree.",".$messagesParPage."") or die ("Erreur : ".mysql_error());

Re: Requête pour moteur de recherche REGEXP

par NewDeveloppeur » 18 oct. 2009, 22:53

C'est bizzare mais ça me retourne la même chose qu'avec REGEXP...
$retour_messages = mysql_query("SELECT * FROM articles WHERE texte LIKE '%".addslashes($recherche)."%' ORDER BY id DESC LIMIT ".$premiereEntree.",".$messagesParPage."") or die ("Erreur : ".mysql_error());
C'est bien correct ça :
WHERE texte LIKE '%".addslashes($recherche)."%'
:?:

Re: Requête pour moteur de recherche REGEXP

par NewDeveloppeur » 18 oct. 2009, 22:37

Oh que oui, quelle précision, merci bcp :D

Re: Requête pour moteur de recherche REGEXP

par fab » 18 oct. 2009, 22:21

Code : Tout sélectionner

requête SQL: SELECT description FROM `sf_guard_user_profile` WHERE description LIKE '%mere%' LIMIT 0 , 30;
Résultats :
description
Mère
mere

Code : Tout sélectionner

requête SQL: SELECT description FROM `sf_guard_user_profile` WHERE description LIKE '%mère%' LIMIT 0 , 30;
Résultats :
description
Mère
mere

Ca devrait répondre à ta question? :p

Re: Requête pour moteur de recherche REGEXP

par NewDeveloppeur » 18 oct. 2009, 22:07

Vu que tu dois faire de la recherche de mot cléfs il serait plus intéressant de pas être sensible a la casse car sinon quelqu'un qui va taper PHP et que dans ta base il y a Php le résultat ne sera pas en sortie...
Bon actuellement j'utilise REGEXP...

Quand je tape : mère, Mère, mèRe, MèRE la requête me sort tout les news comportant la chaine mère à croire que les majuscules ne change rien, mais parcontre quand je tape mere ça ne me sort rien... LIKE peut y remédier ? :?: ignorer la présence d'accent par exemple... :?:

Exemple de news :
Propices à l'overclocking, les processeurs AMD ne sont pourtant pas tous débloqués (BE). Quelle est la meilleure technique à adopter dans ce cas (BIOS, AMD Overdrive, utilitaire de la carte mère), et comment procéder ? Réponse avec un Phenom II X3 710.
Si le format Mini-ITX de VIA n’avait jusqu’à présent pas vraiment rencontré un franc succès auprès des différents constructeurs de cartes mères, la situation semble peu à peu évoluer. Pour preuve, Intel a profité de l’IDF pour présenter un modèle de carte mère Mini-ITX destinée aux processeurs Core i5 et Core i7.
Entre nous, Google est vraiment balèze =D>

Re: Requête pour moteur de recherche REGEXP

par fab » 18 oct. 2009, 21:58

Oui certes, mais le tout est de savoir si ça convient à TES besoins? Vu que tu dois faire de la recherche de mot cléfs il serait plus intéressant de pas être sensible a la casse car sinon quelqu'un qui va taper PHP et que dans ta base il y a Php le résultat ne sera pas en sortie... Après c'est peut être ce que tu veux ! Dans le cas contraire je te conseille vivement de regarder du côté de LIKE ou de MATCH

Re: Requête pour moteur de recherche REGEXP

par NewDeveloppeur » 18 oct. 2009, 21:52

J'ai lu ça ici :

http://www.commentcamarche.net/contents/php/phpreg.php3
Cette fonction permet de générer une chaîne non sensible à la casse, pour les expressions régulières dans les bases de données par exemple. Dans MySQL lorsque vous utilisez la fonction REGEXP (au lieu de LIKE) la recherche est sensible à la casse. La solution est donc de générer une chaîne non sensible à la casse à l'aide de sql_regcase.
Et justement je ne comprend pas ce que veut dire " sensible à la case "... Si j'utilise un LIKE au lieu de REGEXP la recherche sera plus varié ?

En fait je suis pas sûr d'avoir compris, mais je pense être pas loin de la réponse... Corrigez-moi si je me trompe ( y a de grande chance )

Avec REGEXP :
Je tappe " test "
La requête me retourne tout les enregistrement comportant la chaine " test "

Avec LIKE :
Je tappe " test "
La requête me retourne tout les enregistrement comportant une chaine ressemblant à " test "
Même " t est ", " t-est ", " t_est ", " t e s t "...

Alors j'ai vrai ou faux ?

Re: Requête pour moteur de recherche REGEXP

par fab » 18 oct. 2009, 20:21

Oh punaise! Oui désolé j'ai joué l'aveugle sur ce coup là et ça m'a couté quelques pages de lecture sur la documentation de regexp! Effectivement tu dois entouré ton expression régulière! Mais au passage REGEXP c'est assez lourd pourquoi n'utilise tu pas LIKE?

Re: Requête pour moteur de recherche REGEXP

par NewDeveloppeur » 18 oct. 2009, 20:12

Trouvé !!! enfin je pense...

Quand j'utilise des ' ça à l'air de marcher...
$retour_messages = mysql_query("SELECT * FROM articles WHERE texte REGEXP '".addslashes($recherche)."' ORDER BY id DESC LIMIT ".$premiereEntree.",".$messagesParPage."") or die ("Erreur 0001 sur la page recherche.php".mysql_error());
J'ai utiliser :
texte REGEXP '".addslashes($recherche)."'
au lieu de ça :
texte REGEXP ".addslashes($recherche)."
... bizarre non ...

Re: Requête pour moteur de recherche REGEXP

par NewDeveloppeur » 18 oct. 2009, 20:01

Et dans ce cas pourquoi utiliser la fonction MySQL REGEXP si ta variable ne contient pas d'expression régulière? :p
Vous voulez dire par là que ça ne fonctionne pas avec une simple chaine ? Je dit ça parce que j'ai fait un site autrefois en utilisant directement la valeur du champs de recherche... et ça marchais...

Voici une petite image qui illustre tout ça :

Image

Re: Requête pour moteur de recherche REGEXP

par fab » 18 oct. 2009, 19:43

Et dans ce cas pourquoi utiliser la fonction MySQL REGEXP si ta variable ne contient pas d'expression régulière? :p