Jump to content
Sign in to follow this  
Americas

Chercher le mot exact dans un texte

Rate this topic

Recommended Posts

J'ai une table avec un champ "nom" et un champ "description"

Pour faire une recherche sur le champ "nom" pas de problèmes vu le nombre réduit de mots.

Par contre le champ "description" est plus étendu et comporte souvent plus de 500 caractères... et je n'arrive pas à isoler un mot précis dans cette description lors de mes requêtes.

Exemple :

$sql = "SELECT * FROM table WHERE (nom = '$motsclef' or description LIKE '%$motsclef%') GROUP BY description";

En faisant une recherche avec le mot "italie"... pas de soucis.

Mais si je fais une recherche avec le mot "rome"... il va me ressortir toutes les occurences contenant la chaîne "rome" tels que aérodrome ou romeo et m'afficher des résultats qui ne seront pas en rapport avec la requête souhaitée.

j'ai essayé de retirer les % ... mais aucun résultat probant :unsure:

Share this post


Link to post
Share on other sites

Si tu veux un mot d'une description, essaye en partant du principe qu'il y a un espace avant.

$sql = "SELECT * FROM table WHERE (nom = '$motsclef' or description LIKE '% $motsclef%') GROUP BY description";

Mais a quoi sert donc le group by sur le champs description? bizarre comme pratique :unsure:

Share this post


Link to post
Share on other sites

Le Group By description me sert à éliminer les produits identiques car seuls les tarifs sont différents pour une description commune.

Bon... pour l'espace après le % c'est bon... on élimine aérodrome... reste le problème de romeo... sachant qu'avec un espace avant le deuxieme % on ignore rome, rome; ou rome.

Share this post


Link to post
Share on other sites

Salut,

et un truc du genre :

$sql = 'SELECT * FROM table WHERE (nom = \''.$motsclef.'\' or description REGEXP \''.$motsclef.'[^a-zA-Z]\') GROUP BY description';

Ca ne te conviendrait pas par hasard?

Share this post


Link to post
Share on other sites

J'ai essayé ton code Bourinho mais j'ai pas l'affichage des produits... il ne fait que les compter. :wacko:

Share this post


Link to post
Share on other sites

Salut... c'est curieux comme résultat...

Qu'est ce que tu écris dans la suite de ton code pour obtenir l'affichage des résultats?

Sinon, la requête me semblera plus correcte avec :

$sql = 'SELECT * 
FROM table
WHERE nom = \''.$motsclef.'\'
OR description REGEXP \''.$motsclef.'[^a-zA-Z]+\'
GROUP BY description';

Si dans PhpMyAdmin, tu fais la requête suivante, qu'obtiens tu?

SELECT * 
FROM table WHERE nom = 'rome' OR description REGEXP 'rome[^a-zA-Z]+'
GROUP BY description

Share this post


Link to post
Share on other sites

Pour déterminer les limites d'un mot, il faut utiliser [[:<:]] et [[:>:]] avec REGEXP, comme ceci:

SELECT *
FROM table WHERE nom = 'rome' OR description '[[:<:]]rome[[:>:]]'
GROUP BY description

Share this post


Link to post
Share on other sites

SELECT *
FROM table WHERE nom = 'rome' OR description REGEXP '[[:<:]]rome[[:>:]]'
GROUP BY description

Ok... pour un mot précis comme rome ça fonctionne... mais le mot est une variable du type $marecherche

et si je remplace '[[:<:]]rome[[:>:]]' par '[[:<:]]$marecherche[[:>:]]' le script ne fonctionne plus... j'ai une page blanche :nonono:

Share this post


Link to post
Share on other sites

Il faut vraiment te mâcher le boulot :lol:

$query="SELECT * FROM table WHERE nom = '".$marecherche."' OR description REGEXP '[[:<:]]".$marecherche."[[:>:]]' GROUP BY description";

suivi de

mysql_query($query[, $link]); bien sûr :!:

Dan

Share this post


Link to post
Share on other sites

Merci Dan, ça fonctionne super ! :thumbsup:

J'avais seulement oublié les guillemets et le petit point. :blush:

Bon... on m'a jamais appris à coder moi :P

Share this post


Link to post
Share on other sites

Merci dan pour la solution.

Mais j'ai un autre pb.

les informations ne s'affichent pas tous

le programme affiche une ligne et saute une

voici mon code


$id = $_GET['id'];

if ($id = 'm')
{
$mal = $_POST['nom'];
$req = $query="SELECT * FROM mutation where mal_nom_fr REGEXP '[[:<:]]".$mal."[[:>:]]' OR mal_nom_eng REGEXP '[[:<:]]".$mal."[[:>:]]'"; ;
$res = executeRequete($req);
$num = mysql_num_rows($res);
if ($num = 0)
{
header("Location:mutation.php");
echo "alert('Disease not exist')";
}
else{
echo $mal.'<br><div><table border="1">';
while($resultat = mysql_fetch_array($res))
{
echo "
<tr>
<td>".$resultat['gene']."</td>
<td onClick='document.location.href=".$res['lien'].">".$resultat['omim']."</td>
</tr>
";
}
echo '</table></div>';
}

}

Share this post


Link to post
Share on other sites

Il va falloir commencer par doubler tes signe égal dans tes conditions.

N'oublie pas qu'un seul signe égal signifie "affecter une valeur".

Quand tu fais : if ($id = 'm'), tu affectes la valeur 'm' à ta variable $id (et ta condition est toujours vraie, quelle que soit la valeur qu'aurait pu avoir $id avant).

Il faut que tu fasses if($id == 'm')

Share this post


Link to post
Share on other sites

merci.

mais le pb persiste encore il m'affiche une ligne et saute une et ainsi de suite

merci :):flower::smartass::thumbsup: .

mais le pb persiste encore il m'affiche une ligne et saute une et ainsi de suite

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...