Moteur de recherche retour des resultat par ordre de pertinance.

Eléphanteau du PHP | 17 Messages

16 août 2007, 09:45

Bonjour a tous... je suis completement perdu je n'arrive pas a imaginé comment on peut fair ca...
-commen donner comme ordre a la requete a chaque foi que tu trouve un element tu incremente une varable et de mm pour les autre mot de recherche pour a la fin aficher le top 10 ...
J'ai besoin de vos connaissance ^^

voila une partie de mon code.

Code : Tout sélectionner

<?php $type=$_POST['type']; $rech=$_POST['recherche']; $rtype=$_POST['type_rech']; //recuperation des retour a la ligne et des guillemet $rech= nl2br($rech); $rech= addslashes($rech); ............. //on coupe la chaine de caractere a chaque espace //$mots = explode(" ", $rech); $mots = preg_split('#[^\S]+#si', $rech); //on compte le nombre de mot $long = count($mots); //initialisation de la variable condition $condition = ""; $i=0; if (empty($rech)) { echo '<DIV id=content>'; echo 'Veuillez entrer une recherche'; include ('rechercher_procedure.php'); exit (); } else if($type=="logi" and $rtype=="tous") { //echo 'recherche par mot clé (tous) - logiciel '; for ($i=0; $i<$long;$i++) { if($mots[$i]> "2") { $condition = $condition .'AND (proc_soft.proc_s_description like \'%'.$mots[$i].'%\' OR pb_soft.pb_s_description like \'%'.$mots[$i].'%\')'; $condition = ltrim($condition,'AND'); $table = '(relation_soft_pb LEFT JOIN proc_soft ON proc_soft.proc_s_num = relation_soft_pb.proc_s_num)LEFT JOIN pb_soft ON relation_soft_pb.pb_s_num = pb_soft.pb_s_soft'; } } } else if($type=="logi" and $rtype=="omoin") { // echo 'recherche par mot clé (au moin un) - logiciel '; for ($i=0; $i<$long;$i++) { if($mots[$i]> "2") { $condition = $condition .'OR (proc_soft.proc_s_description like \'%'.$mots[$i].'%\' OR pb_soft.pb_s_description like \'%'.$mots[$i].'%\')'; $condition = ltrim($condition,'OR'); $table = '(relation_soft_pb LEFT JOIN proc_soft ON proc_soft.proc_s_num = relation_soft_pb.proc_s_num)LEFT JOIN pb_soft ON relation_soft_pb.pb_s_num = pb_soft.pb_s_soft'; } } } ................. //construction de la requete $sql = 'Select * from '.$table.' where '.$condition ; // requête SQL qui compte le nombre total d'enregistrement dans la table et qui //récupère tous les enregistrements $data = mysql_query($sql) or die ('Erreur: '.mysql_error()); $total = mysql_num_rows($data); //si on récupére un résultat on affiche le tableau if($total) { echo '<div id=content>'; echo '<table>'; echo '<tr>'; echo '<td>Num procédure</td>'; echo '<td>Createur</td>'; echo '<td>Description</td>'; echo '</tr>'; echo '<tr>'; while($row = mysql_fetch_array($data)) { echo '<tr>'; echo '<td>'.$row["proc_s_num"].'</td>'; //selectionner le Nom et le prenom du createur $sql_nom = 'select * from utilisateur where util_num = '.$row["util_num"]; $res = mysql_query($sql_nom) or die ('Erreur : '.mysql_error()); $nom=mysql_fetch_assoc($res); echo '<td>'.$nom["util_prenom"].'<br>'.$nom["util_nom"].'</td>'; echo '<td>'.$row["pb_s_description"].'</td>'; echo '</tr>'; } echo '</tr>'; echo '</table>'; echo '</div>'; } else { echo 'la recherche n\'a donnée aucun résultat'; } ?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

16 août 2007, 11:30

Tu dois pouvoir y parvenir avec les fonctions de recherche FULL TEXT de MySQL ... regarde du côté de MATCH / AGAINST :
http://dev.mysql.com/doc/refman/5.0/fr/ ... earch.html
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 17 Messages

16 août 2007, 13:31

ben je trouve pas full_text dans php myadmin ....

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

16 août 2007, 13:47

ben je trouve pas full_text dans php myadmin ....
Qui à parlé de phpmyadmin ?

Ryle donne un lien où tu trouveras ces infos. Il s'agit donc de requêtes à construire avec "MATCH / AGAINST"

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 17 Messages

16 août 2007, 15:50

ben justemen dans la creation de la table exemple on voi qu'il utlise la commande fulltext... je vais encor fouiller ca mais il faut bien que je declar a un endroi donner que le champ qui est dans ma base et fulltext nan?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

16 août 2007, 16:26

Rien ne t'empèche de créer une table à l'aide d'une requête... comme ça pas de souci pour trouver les options.

Sinon pour le full_text dans phpmyadmin me semble qu'il est rangé avec les clés possibles (primaire, index...)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute