Base de Donnée et requête de recherche élaborée

Nouveau WRInaute
Bonjour, j'ai réalisé un mini moteur de recherche de mots clefs dans une base.
J'ai un formulaire avec un champ a=motclef1 motclef2 motclef3 ...
Je récupère la valeur :
Code:
$a=$_GET['a'];
j'exécute la fonction trim sur le champ, j'exécute la fonction htmlentities toujours sur ce champ.
et ensuite je pars sur la requête sql comme ceci :
Code:
$var=explode(' ',$a);
	 for ($i=0 ; $i<count ($var) ; $i++) 
	      {
	      $t0=$var[$i];
	      $selectcommande.="LIKE '%$t0%' OR membres LIKE '%$t0%' ";
	      }
$requete="SELECT * FROM matable WHERE listingpage ".$selectcommande." ";

Petit programme que l'on retrouve facilement sur le web.Seulement, si les mots contiennent des accents ça marche mais comment faire une recherche plus rapide si cela existe, plus précise car les résultats sont vastes, et surtout si je cherche théo puis-je touver theo (sans accent)?

J'ai trouvé des expressions comme ceci mais je ne fais pas le rapprochement :
LIKE CONVERT( _utf8 '%motclef%' USING ) COLLATE
OR `champ` LIKE CONVERT( _utf8 '%motclef%' USING utf8 ) ...

Quel est le mieux ?
 
Nouveau WRInaute
Il ne me semble que MySQL est insensible à la casse et aux accents, en tout cas sur mon MySQL 4.0. Tu peux donc trouver "theo" en tapant "théo".

Pour avoir des résultats plus précis lorsque l'utilisateur tape plusieurs mots, tu as deux options :
- limiter à l'expression exacte sans tenir compte des accents (ce qui peut amener beaucoup de résultats nuls)
- mettre en place un système de pondération en attribuant un score de pertinence à chaque résultat.

Sur les grosses bases (recherche plein texte dans les titres, accroches et corps d'articles), j'ai un système plutôt lourd mais apparemment assez fonctionnel qui :
- crée une table temporaire recherche_temp avec l'intégralité des résultats obtenus par la requête de base
- attribue des points par des UPDATES sur les lignes de recherche_temp : +1 si l'un des mots apparaît dans le corps, +3 dans l'accroche, +5 dans le titre
- attribue des points supplémentaires si le titre ou l'accroche contient l'expression exacte (espaces compris)

Tu te retrouves donc avec une table où tu peux faire un SELECT sur l'ensemble des résultats et les afficher par score descendant.

J'espère que c'est assez clair....
 
Discussions similaires
Haut