Page 1 sur 1

Moteur de recherche

Posté : 01 mai 2008, 16:02
par maelinn
Bonjour !

J'ai un soucis avec mon moteur de recherche. J'ai crée un champ dans ma bdd qui recueille les mots clés d'articles que j'écris. Je voudrais que grâce au moteur de recherche, les visiteurs du site puissent retrouver un article les intéressant en faisant un tri par mot clé.
Le probleme c'est que si la personne rentre plusieurs mots clés, il n'obtiendra aucun résultat. Pour être claire, je voudrais que la recherche puisse se faire en multicritère.

Ex : un fichier avec mots clé "livre, aventure, fantasy" et un autre avec "aventure, urbain"
Si un visiteur fait une recherche avec les mots clé "aventure, fantasy", il ne devra trouver que le premier article.

Merci de votre aide :D

Mon code :
<form method="post" action="recherche.php#nav">
        <p><input type="text" name="mot_cle"/></p>
        <input type="submit" value="Rechercher"/>
		</form>
		
			
		<?php if (isset($_POST['mot_cle']) AND !empty($_POST['mot_cle']))
			{
		$mot_cle = mysql_real_escape_string(htmlspecialchars($_POST['mot_cle'], ENT_QUOTES));
    	
		$retour = mysql_query("SELECT * FROM livres WHERE mot_cle LIKE '%$mot_cle%'") or die("Erreur MySQL : " . mysql_error('erreur sql'));

Posté : 01 mai 2008, 16:58
par katagoto
pourquoi ne remplace tu pas les virgules, point-virgules et les espaces par %

:roll:

Posté : 01 mai 2008, 18:03
par maelinn
Je ne comprends pas. Quelles virgules et espaces je dois remplacer ?

Posté : 01 mai 2008, 18:38
par katagoto
les virgules, les espaces et les points virgules qui sont dans la requête du client...

Posté : 01 mai 2008, 19:39
par caroube
Non mauvaise solution. parce que si tu fais une recherche sur "%aventure%fantasy%" et que l'article est indexé dans la base par "fantasy, aventure", ça ne donnera rien.

Une première solution consiste à éclater les mots clés et à construire dynamiquement la clause where de recherche avec des suites de like.

Code : Tout sélectionner

where (motcle like '%aventure%' and motcle like '%fantasy%' and motcle like '%autre%')
Une deuxième solution (plus simple) consiste à regarder les fonctions fulltext de MySQL
http://dev.mysql.com/doc/refman/5.0/fr/ ... earch.html

Posté : 01 mai 2008, 20:49
par maelinn
Merci pour vos conseils :D
En ce qui concerne la fonction fulltext, c'est ce que j'ai utilisé au départ mais la recherche renvoie tous les articles contenant au moins un des mots de la recherche. Elle ne combine pas les différents mots clés.
$retour = mysql_query("SELECT * FROM livres WHERE MATCH(mot_cle) AGAINST('$mot_cle')") or die("Erreur MySQL : " . mysql_error('erreur sql'));
En ce qui concerne l'éclatement, si j'ai bien compris, il faut que je fasse un champ de formulaire par mot clé ?