regexp et terme exact

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 : regexp et terme exact

par inuendo » 25 janv. 2006, 13:37

Argh...

Bon, ça marche à peu près pour le français mais pas pour les caractères asiatiques ! Il va directement à la fin de mon code est écrit : pas de résultat pour *mot* (qui pourtant apparaît correctement sur la page)

Code : Tout sélectionner

SELECT champs1,champ2, champ3, MATCH (champ1,champ2) AGAINST ('motcherché') AS score FROM table WHERE MATCH (champ1,champ2) AGAINST('motcherché*' IN BOOLEAN MODE) ORDER BY score DESC
Cette requête ne marche pas avec les caractères asiatiques. Un LIKE en revanche marche !

Mais bon, c'est peut-être plus de l'ordre de MySQl, je ne suis peut-être pas là où il faudrait en fait^^

par inuendo » 25 janv. 2006, 01:35

Bon, j'ai trouvé mais c'est pas très logique comme méthode :

html_entity_decode($critere, ENT_COMPAT, 'ISO8859-1')

En fait, mes données sont censées être en UTF-8 (je dis bien censé parce que je n'en suis plus sûr quand je vois ça... latin1?)

par inuendo » 25 janv. 2006, 01:17

Ah aussi, si j'enlève la fonction booléenne, ça marche 'presque' correctement :

Pour le mot jour, il va quand même me mettre séjour et pour le mot séjour, il va m'inclure les mots jour !

j'ai l'impression qu'il considère le é comme un % ou un espace vide (pourquoi séjour pour la recherche du mot jour ?)

par inuendo » 25 janv. 2006, 00:02

Salut,

alors suite à ma découverte de FULLTEXT, je suis arrivé à ce genre de requête SQL qui répond pas mal à mes attentes :

Code : Tout sélectionner

SELECT champs1,champ2, champ3, MATCH (champ1,champ2) AGAINST ('motcherché') AS score FROM table WHERE MATCH (champ1,champ2) AGAINST('motcherché*' IN BOOLEAN MODE) ORDER BY score DESC
Le seul souci que je rencontre est lié à l'accentuation :

Si je tape le mot journée, il me renvoie des réponses qui n'ont rien à voir avec le mot journée. Et dès qu'il y a un accent en général, ça ne marche plus. Cela marche normalement avec un LIKE. Est-ce inhérent à la fonction ?
Devrais-je appliquer un htmlentities ('','', UTF-8) ??
J'ai voulu passer à php1.8 mais j'avais un problème d'affichage des caractères asiatiques (import de la table en latin1, ça marche, si je change en utf-8, je lis les données dans la table mais j'ai ??? sur le site)

Une idée ? Merci^^

par inuendo » 24 janv. 2006, 19:55

- Est-il possible de garder la fonction de pertinence de résultat mais de permettre %mot% ?
La réponse est oui !

Il suffit de mettre IN BOOLEAN MODE dans la requête puis de choisir parmi les différentes options !

Reste le problème de l'accentuation...

par inuendo » 24 janv. 2006, 19:21

Alors après tentatives, le fulltext semble être ce qui correspond le plus à ce que je cherche !

Cependant quelques problèmes :

- les accents non pas l'air d'être pris en compte. Ainsi, si je cherche le mot 'jour', il me renverra le mot 'séjour' ??

- Est-il possible de garder la fonction de pertinence de résultat mais de permettre %mot% ?

par inuendo » 23 janv. 2006, 23:30

J'ai pas l'impression que ça marche...

REGEXP, ça ne permet pas de trouver le mot exact dans la chaîne de caractère ?

Sinon, fulltext, ça peut y ressembler mais faut que je comprenne :-k

par DarkBlue » 23 janv. 2006, 23:23

et si tu fais

like %' jours '% (sans oublier les espaces autour de jour ?

par inuendo » 23 janv. 2006, 23:07

Merci à tous les deux.

Effectivement, si je mets égal, je n'aurai pour ligne que le mot indiqué ainsi :

si je mets where voca='jour'

Je n'aurai que la ligne qui contient le mot jour

Mais pas la ligne : le jour se lève.

Je regarde le lien Huber Roksor

par Hubert Roksor » 23 janv. 2006, 23:04

En fait il souhaite les textes contenant ce mot.

inuendo, ce que tu recherches est là: [ Recherche en texte intégral (Full-text) dans MySQL ]

par DarkBlue » 23 janv. 2006, 22:50

Hello ,

et si tu mets '=' tout simplement ?

regexp et terme exact

par inuendo » 23 janv. 2006, 22:49

Bonjour,

j'expose ce sur quoi je bute :

Je voudrais que ma requête ne renvoie que les lignes contenant le mot 'jour' dans une chaine de caractères. Donc, je ne veux pas qu'elle me renvoie les lignes comportant les mots 'journées' 'journée' 'ajourner', etc.

J'ai lu sur le forum une personne qui proposait de remplacer LIKE par REGEXP 'jour' par exemple. Mais cela ne marche pas. Ai-je mal compris ?
include( "mysql.inc.php" );
$requete    = "SELECT * FROM `japfr` WHERE fr REGEXP 'Psy'";
    $execution  = mysql_query( $requete, $connection );
$nombre = mysql_num_rows($execution); 
	
	if ($nombre==0){
echo "aucune traduction";
}
else 
	while ( $result=mysql_fetch_array( $execution) ) 
{

echo $result["jap"] .$result["fr"];
echo "<br />";
} 
Donc si j'ai bien compris, ça ne devrait me renvoyer que 'psy' ? Mais, cela me trouve tous les mots comportant 'psy'...