8795 sujets

Développement web côté serveur, CMS

BOnjour,

Je suis actuellement en train de faire un script de recherche pour un système de FAQ. Et j'aurais besoin d'aide quant à la classification des résultats.

Ma table FAQ est constituée de cette façon : id / question / reponse / motscles

Exemple d'enregistrement dans ma bdd : (ce n'est qu'un exemple)

-----
id : 1
question : Comment lire mes mails ?
reponse : En utilisant un client mail par exemple etc..
motscles : lire mail mails consultation email emails
-----
id : 2
question : Comment supprimer mes mails ?
reponse : Il vous suffit de selectionner le mail à supprimer avec la case à cocher
motscles : supprimer mail mails éliminer eliminer
-----
id : 3
question : pourquoi je n'arrive pas à accéder à internet
reponse : Vérifiez que votre cable réseau est branché
motscles : accès internet


Admettons maintenant que l'utilisateur dans le champ de recherche saisisse la chaine suivante :
Comment supprimer mes mails

Si j'effectue une requêtte de ce type là :
mysql_query("SELECT * FROM `faq` WHERE motscles LIKE '%Comment%' OR motscles LIKE '%supprimer%' OR motscles LIKE '%mes%' OR motscles LIKE '%mails%'")

il me trouvera donc les deux premières réponses à savoir :
Comment lire mes mails ? ET Comment supprimer mes mails ?

Si on vérifie ce que la personne a saisie comme mots cles et les mots cles entrés pour chaque question on remarque ceci :
Comment lire mes mails ? : Mot en commun "mail"
Comment supprimer mes mails ? : Mots en commun "mail" et "supprimer"

Alors j'ai trouvé le moyen de trouver l'intersection de deux tableaux et j'ai trouvé le moyen de compter l'intersection qu'il y a entre deux tableaux avec ces fonctions :
<?php
count(array_intersect($motsclesdelaquestion, motssaisisparlutilisateur));
?>


Mais une fois que j'ai cette valeur (Qui sera de "1" pour la question Comment lire mes mails et qui sera de "2" pour la question Comment supprimer mes mails)

comment puis-je faire pour trier les réponses dans l'ordre décroissant ? Du "PLUS de mots en commun" au "MOINS de mots en commun" sachant que la requette est normalement déjà effectuée (et donc les résultats déjà triés)

Merci de l'aide que vous pourriez m'apporter

PS:

COmment trier les résultats lorsque je suis à ce niveau là de l'affichage de mes réponses :

<?php
while($resultats = mysql_fetch_array($selection_recherche))
           {
           echo '
          <strong>Numero:</strong>'.$resultats['id'].'<br />
          <strong>Question:</strong>'.$resultats['question'].'<br />
          <strong>Reponse:</strong>'.$resultats['reponse'].'<br />
          <strong>Mots Cles de la question:</strong>'.$resultats['motscles'].'<br />
          <strong>Nbr de Mots Cles en commun:</strong>'.count(array_intersect($mots, explode(" ", $resultats['motscles']))).'<br /><br />';
           }
?>

Modifié par fieldset (18 Sep 2007 - 09:53)
Bonjour,

Ma réponse serai assez simple je pense, lors de ta requête tu insérés tes donnes dans un tableau comme cela après tu peux utiliser ton count et ainsi reclasser les tableaux par résultat.
Oui alors en fait c'était tout con...
Quand on a le nez dedans pendant trop longtemps on voit vraiment plsu rien lol.

Alors la solution :

while($resultats = mysql_fetch_array($selection_recherche))
			{
			$intersection = count(array_intersect($mots, explode(" ", $resultats['motscles'])));
			$resultats['inter'] = $intersection;
			
			$hop[] = array(
				"inter" => $resultats['inter'], 
				"id" => $resultats['id'], 
				"question" => $resultats['question'], 
				"reponse" => $resultats['reponse'], 
				"motscles" => $resultats['motscles']);
			}
			
		array_multisort($hop, SORT_DESC); //On trie les résultats enregistrés dans le tableau dans l'ordre decroissant sur la première clef qui est le nbr de mots cles en commun
		
		for($i = 0; $i < $nombre_resultats; $i++)
			{
			echo '<p>
			<strong>Nbr de Mots Cles en commun:</strong>'.$hop[$i]["inter"].'<br />
			<strong>Numero:</strong>'.$hop[$i]["id"].'<br />
			<strong>Question:</strong>'.$hop[$i]["question"].'<br />
			<strong>Reponse:</strong>'.$hop[$i]["reponse"].'<br />
			<strong>Mots Cles de la question:</strong>'.$hop[$i]["motscles"].'</p>
			<p>----------</p>';
			}