Pourquoi '%mot%' ça marche mais pas 'mot%' ?

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 : Pourquoi '%mot%' ça marche mais pas 'mot%' ?

par inuendo » 23 janv. 2006, 16:46

Merci pour tes précisions.

En fait, il s'agit d'un dictionnaire et non pas d'un moteur de recherche à proprement parler.

Les gens entrent le mot 'X' et obtiennent les traductions du mot. Cependant, X est souvent accompagné d'autres mots (synonymes ou dans des phrases). Je voulais donc que les gens aient en premier le terme exact puis les autres réponses. Un classement alphabétique ne suffit pas. Je vais voir ce que je comprends des preg^^

par jobherzt » 23 janv. 2006, 15:32

oui, du coup ca suppose un traitement apres la requete. avec les expressions reguliere tu fais faire des choses extremement fines, bien plus poussee que ce que tu veux, donc a priori pas de pb. sache qu'il est possible que ta version de mysql supporte les expressions regulieres dans la requete, ce qui te permettrait d'avoir un resultat precis dans la requete, ce qui est une bonne chose a priori. http://dev.mysql.com/doc/refman/5.0/fr/regexp.html . dans ce cas, le tuto de ripat reste partiellement valable ( syntaxe proche ).

enfin, sache qu'il te reste la solution ( c'est ce que je prefere ) d'indexer tes textes, cad a dire de creer une base avec une correspondance mot_cle <=> article, en ayant pris soin de supprimer de cette liste les petits mots inutiles. cela evite les recherches complexe un peu lourde, et elimine de fait le genre de probleme que tu rencontre. tu peux meme associer a chaque couple (mot, article) un certain score predefini, qui te permettra de faire un classement fin.

par inuendo » 23 janv. 2006, 15:14

Merci pour l'info

Je n'arrive toujours pas à faire un simple where X='maison'

J'ai doute sur preg_match... Est-ce que cela va me permettre de faire apparaître les résultats qui contiennent que les mots 'maison' et pas 'maisonnette', etc ?

par jobherzt » 23 janv. 2006, 14:48

'%maison' filtre toutes les données qui comportent quelquechosemaison
effectivement, sauf que ca agit au niveau de la chaine, cad que ca capture les chaine qui terminent par maison, puisque l'espace n'est qu'un caractere comme un autre.

pour preg_replace, regarde par la -> http://www.phpfrance.com/tutoriaux/inde ... pcre-ripat

le tuto de l'ami Ripat, un modele du genre.

par inuendo » 23 janv. 2006, 14:38

non, il me semble que

'%maison' filtre toutes les données qui comportent quelquechosemaison (maison inclue)

'maison%' filtre toutes les données qui comportent maisonquelquechose
(maison inclue)

'%maison%' filtre toutes les données qui comportent quelqueschosemaisonquelquechose
(maison inclue)

J'ai bien dans ma table le mot 'Maison (nm)' et j'ai cherché aussi 'Maison (nm)' pour voir mais pas plus de résultat...

Pour le preg_match, quelqu'un aurait la gentillesse de m'expliquer le fonctionnement ? je le triture là mais je n'arrive pas à avoir ce que je veux...

par jobherzt » 23 janv. 2006, 14:25

j'ai lu un peu en diagonale, alors excusez moi si je dis une betise, mais a priori "maison%" et "%maison" filtre respectivement les chaines qui commence et terminent par 'maison'.... ce qui n'est le cas d'aucune de tes chaines ! pas etonnant que ca ne retourne rien..

par Invité » 23 janv. 2006, 14:16

Bonjour !

Oui, j'ai essayé les deux et aucun ne marche... la table interrogée est en varchar... alors est-ce que cela pourrait être un souci d'encodage utf-8 ?
Je ne comprends pas pourquoi '%maison%' marche mais pas '%maison' ! ou '%Maison%'...

Sinon pour trouver que le mot 'maison', il faudrait peut-être que j'utilise la fonction preg_match que je viens de trouver mais je ne comprends pas bien son utilisation...

par Cyrano » 23 janv. 2006, 14:05

Il n'est pas exclus que la requête soit sensible à la casse. As-tu essayé avec "Maison%" au lieu de "maison%" ?

par inuendo » 23 janv. 2006, 13:20

ah désolé, je me suis trompé dans le premier code !
<?php 
include( "mysql.inc.php" ); 
<?php 
include( "mysql.inc.php" ); 
$requete    = "SELECT * FROM `japfr` WHERE fr LIKE '%maison%'"; 
    $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 />"; 
} 

?> 

Pourquoi '%mot%' ça marche mais pas 'mot%' ?

par inuendo » 23 janv. 2006, 13:02

Bonjour tout le monde !

Alors je me retrouve avec un problème qui doit être tout bête mais dont la réponse m'échappe !

Je vous mets ci-dessous une version simplifiée de mon code avec seulement la requête et un echo :

Code : Tout sélectionner

<?php include( "mysql.inc.php" ); <?php include( "mysql.inc.php" ); $requete = "SELECT * FROM `japfr` WHERE fr LIKE 'maison'"; $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 />"; } ?> $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 ça, ça marche MAIS je voulais ranger les résultats dans l'ordre de pertinence (enfin plus ou moins).

Par exemple s'il y a : la maison du voisin, la maison d'en face, ma maison est bleue, maison (nm)
Je voulais que la requête sorte :

Maison (nm)
La maison d'en face
La maison du voisin
Ma maison est bleue

Si je fais un ORDER BY, Maison (nm) ne sera pas en premier.

J'ai essayé :

Code : Tout sélectionner

$requete = "SELECT * FROM `japfr` WHERE fr ='maison'";
et la requête ne me sort aucun résultat pour 'maison%' ou '%maison' ...
Mais fonctionne avec id='17%' !

Je ne comprends plus rien