Bonjour,
Voila cette apres midi jai cherché une solution a mon probleme concernant le fait de faire une recherche a partir dune base de donnée et un champ precis. or je voudrai par exemple depuis un formulaire php taper une phrase...
et comme tous le monde sait, une phrase et composé de mot ! c 'est meme mots ont les appellera mots clefs !
Quand on lance la requete php, on constate que les mots clefs que j'ai taper ( imaginons )
Aujourdhui je vais à la piscine et je prend le bus
renverra a un resultat...
des phrases programmé renvoi a une reponse .. voila le but du script.
Donc imaginons que je tape la phrase que j'ai mis en haut dans mon formulaire.
Mon script va chercher tous les mots comportant les mots que jai tapé et va afficher un resultat.
Mais moi je voudrai restreindre tous ca ! et dire ceci :
tous les mots qui sont tapés sont verifiés dans la base et renvoyé au plus proches au mots pres !
Je sous entend bien plus proche dans le sens que .
Aujourdhui = 1 mots
je = 1 mot
vais = 1 mot
à = 1 mot
Jusqu'a ce qui ramene a un resultat unique.
Aujourd'hui je vais à la piscine. ( si la phrase est la meme dans la base de donnée alors le resultat s'effectuera ) mais il y a une faille
imaginons que je mette :
demain je vais a la piscine. le resultat se rapprochera vers aujourdhui je vais a la piscine
mais si il y a deux fois le mot piscine dans la base de donnée, il va mafficher le resultat le plus proche. et c'est pas ce que je veux.. genre par exemple: hier jai vu un gars ce noyer dans la piscine (ben oui le mot piscine figure dans la base )
en gros je veux regroupé tous les mots qui sont tapé et si la majorité d'entre eux sont presentes (mot clefs) ( c a dire le maximum ! alors on affiche ce resultat maximum! et pas l'autre.) c'est a dire le je, vais, a, la, piscine 5mots clefs
Tous les mots tapés sont verifiés...
Le probleme avec mon script c'est que il ignore pas le fait que dans un enregistrement par exemple :
Je vais a la piscine
1 1 1 1 1
Je vais a la mer
1 1 1 1 0
le "je" le "vais" le "a" le "la"
il l'ai garde pour lui, je veux dire il l'ai ignore pas.
pourtant jai bien dis dans mon formulaire. je vais a la piscine
donc il doit prendre le maximum de mot clefs pour retourner a un resultat unique.
piscine est present dans mon formulaire !!!!! il doit ignorer l'enregistrement ou il y a la phrase je vais a la mer..
voici mon script..
j'espere sincerement quelquun pourra maider parce que je deviens dingue ! jessai detre le plus precis en vous expliquant mon probleme mais c'est pas facile ...
jespere que vous allez arrivé a me comprendre..
--------------------------
SI VOUS VOULEZ TESTER EN LOCAL CEST POSSIBLE
table ---
CREER UN CHAMP : id (int) un autre champ question (text) et un champ resultat (text) et essayer ! je vous jure vous comprendrez mieux ;)
et inserez plusieurs phrases avec les memes mots ou les memes pronoms etc..
---
<form name="form1" method="post" action="boul.php">
<p><font face="Tahoma" size="2">Posez votre question : </font><br><input type="text" name="question" size="79"><input type="submit" name="submit" value="Ok"> </p>
</form>
<? include("config.php");
if(empty($_POST["submit"])){
}
else{
$array_ask = explode(' ',$_POST['question']);
$first = true;
$req = '';
foreach ($array_ask as $key => $value)
{
if ($first)
{
$first = false;
$req .= "`question` LIKE '%".$value."%'";
}
else
{
$req .= " OR `question` LIKE '%".$value."%'";
}
}
$req_results = mysql_query("SELECT * FROM `voyance` WHERE ".$req."");
if ( @mysql_num_rows($req_results) == 0)
{
echo 'aucun résultat';
}
elseif(@mysql_num_rows($req_results)>1){
echo 'Désolé mais je ne comprend pas votre question, pouvez vous etre plus precis';
}
elseif(@mysql_num_rows($req_results)==1){
$rest = mysql_fetch_array($req_results);
echo $rest['resultat'];
}
else{
echo "erreur";
}
}
?>