Bonjour à tous!
J'essaie de mettre en place un petit module de recherche interne à mon site et comme je ne trouve pas mon bonheur sur des scripts tout fait, j'ai décidé de le faire moi même afin qu'il corresponde à mes exigences.
Mais la tâche s'avère rude et longue. C'est pourquoi je viens demander un peu d'aide.
Pour info, je souhaite questionner ma base de données en fonction d'une requête d'environ 3 mots et faire ressortir les enregistrements correspondants.
Jusque là pas trop de problème même si je pense que mon code n'est pas très optimisé mais je m'en inquieterai plus tard.
J'arrive donc à afficher les résultats mais comme certains sont plus pertinents par rapport à la recherche effectuée, j'aimerai les afficher en premier.
La recherche porte actuellement sur un seul champ d'une table de ma bd. Ainsi, si la recherche est composée de 3 mots et qu'ils sont retrouvés dans un des résultats, je voudrais que ces derniers soient affichés en premier, puis on retrouverait ceux qui correspondent à 2 mots de la recherche et enfin ceux où l'on ne retrouve qu'un seul mot.
Pour le moment, j'affiche mes résultats dans une boucle dont l'ordre n'est pas défini. J'arrive aussi à déterminer la pertinence de chaque résultat par rapport à la recherche effectuée en calculant le nombre de mots retrouvés.
Maintenant, il faudrait que j'arrive à classer les résultats par pertinence en fonction du nombre de mots retrouvés. Mais là, c'est le trou noir. Je ne vois pas trop comment faire puisqu'en fait, pour calculer cette pertinence, il faut déjà que la requête générant les résultats soit effectuée ce qui fait que je ne peux pas mettre de ORDER BY dessus.
Voici mon code:
//Requête renvoyant les résultats liés à la recherche
$query_rs_resultat2="SELECT DISTINCT nom_etab FROM tbl_etab, tbl_etab_type WHERE tbl_etab.type_etab=tbl_etab_type.etab_type AND (nom_etab LIKE '%".$mot."%'".$premiermot.$deuxiememot.$troisiememot.")";
$rs_resultat2 = mysql_query($query_rs_resultat2, $conn_develop) or die(mysql_error());
//Boucle affichant les résultats
while ($row_rs_resultat2 = mysql_fetch_assoc($rs_resultat2)) {
//Vérification de la présence des mots recherchés dans les résultats de la requête
$test1 = strstr(str_replace(" ",",",strtolower($row_rs_resultat2['nom_etab'])), $premiermot);
$test2 = strstr(str_replace(" ",",",strtolower($row_rs_resultat2['nom_etab'])), $deuxiememot);
$test3 = strstr(str_replace(" ",",",strtolower($row_rs_resultat2['nom_etab'])), $troisiememot);
if(($test1!='') && ($test2!='') && ($test3!='')) {
$ordre1b = 1;
} else {
$ordre1b = 0;
}
if((($test1!='') && ($test2!='')) || (($test1!='') && ($test3!='')) || (($test2!='') && ($test3!=''))) {
$ordre2b = 1;
} else {
$ordre2b = 0;
}
if(($test1!='') || ($test2!='') || ($test3!='')) {
$ordre3b = 1;
} else {
$ordre3b = 0;
}
$ordre2 = $ordre1b+$ordre2b+$ordre3b;
echo
// J'affiche les noms correspondant à la recherche et le degré de pertinence
$row_rs_resultat2['nom_etab'].' '
.$ordre2.' <br/>
';}
Merci pour toute aide et conseil que vous pourrez m'apporter.