Problème - moteur de recherche interne
Résolu
termi-zzz
Messages postés
63
Date d'inscription
Statut
Membre
Dernière intervention
-
termi-zzz Messages postés 63 Date d'inscription Statut Membre Dernière intervention -
termi-zzz Messages postés 63 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Problème - moteur de recherche interne
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Google moteur de recherche page d'accueil - Guide
- Copernic moteur de recherche - Télécharger - Navigateurs
- Rechercher ou entrer l'adresse 4 - recherche google ✓ - Forum Réseaux sociaux
- Copernic Desktop Search - Télécharger - Utilitaires
11 réponses
bonsoir,
tu fais un explode() de ta chaine par rapport à espace, cela te donnera un array avec tous les mots.
par une boucle tu parcours cet array et tu cree ta requette en ajoutant à chaque "tour" une condition OR
Par contre sans le LIKE % ça recherchera chacun des noms exacts
sinon tu mets des LIKE%.....% à la place des =
tu fais un explode() de ta chaine par rapport à espace, cela te donnera un array avec tous les mots.
par une boucle tu parcours cet array et tu cree ta requette en ajoutant à chaque "tour" une condition OR
$array_chaine=explode(" ",$_POST[text]); $query="SELECT * FROM recherche WHERE "; for($i=0;$i<sizeof($array_chaine);$i++){ if($i>0){$query.=" OR ";} $query.="recherche_motscles = '$array_chaine[$i]'"; } $query.= " ORDER BY recherche_priority ASC "; mysql_query($query); //etc..
Par contre sans le LIKE % ça recherchera chacun des noms exacts
sinon tu mets des LIKE%.....% à la place des =
Salut Alain, merci pour ta réponse, malheureusement y'a un truc que j'ai mal compris...
Qu'entends-tu par - " en ajoutant à chaque "tour" une condition OR " - ??? Je ne suis pas un as en php donc si tu pouvais m'aider juste encore un peu à bien comprendre la fonction car pour l'instant je bug sur un truc mais je ne vois pas que faire ??
Merci a+
Qu'entends-tu par - " en ajoutant à chaque "tour" une condition OR " - ??? Je ne suis pas un as en php donc si tu pouvais m'aider juste encore un peu à bien comprendre la fonction car pour l'instant je bug sur un truc mais je ne vois pas que faire ??
Merci a+
Bonjour,
dans cette partie je t'ai fait:
$query="SELECT * FROM recherche WHERE "; // la on met le debut de la requette
for($i=0;$i<sizeof($array_chaine);$i++){ // ça c'est la boucle qui parcours tout l'array donc les mots un par un
if($i>0){$query.=" OR ";} // la a partir de la deuxieme condition on met le OR (OU)
$query.="recherche_motscles = '$array_chaine[$i]'"; la on met la premiere condition
}
$query.= " ORDER BY recherche_priority ASC "; // la on met la fin de la requette
$query.= sert a concatener c'est a dire on empile dans la variable à la suite
le principe de la requette sera de chercher toutes les lignes qui contiennent le mot 1 OU le mot 2 OU le mot 3 etc...
"SELECT * FROM recherche WHERE recherche_motscles=mot1 OR recherche_motscles=mot2 OR recherche_motscles=mot3 etc....
dans cette partie je t'ai fait:
$query="SELECT * FROM recherche WHERE "; // la on met le debut de la requette
for($i=0;$i<sizeof($array_chaine);$i++){ // ça c'est la boucle qui parcours tout l'array donc les mots un par un
if($i>0){$query.=" OR ";} // la a partir de la deuxieme condition on met le OR (OU)
$query.="recherche_motscles = '$array_chaine[$i]'"; la on met la premiere condition
}
$query.= " ORDER BY recherche_priority ASC "; // la on met la fin de la requette
$query.= sert a concatener c'est a dire on empile dans la variable à la suite
le principe de la requette sera de chercher toutes les lignes qui contiennent le mot 1 OU le mot 2 OU le mot 3 etc...
"SELECT * FROM recherche WHERE recherche_motscles=mot1 OR recherche_motscles=mot2 OR recherche_motscles=mot3 etc....
Merci, c'est ce que j'avais globalement compris... Mais mon problème, c'est qu'il ne trouve jamais aucun résultat désormais, donc j'ai du faire une erreur quelque part, car la requête ne fonctionne pas correctement et je ne vois toujours pas d'où ça vient... Copier-coller du code source:
<? ...
if (($_POST["text"] == "")||($_POST["text"] == "%")) {
echo "Veuillez entrer un mot clé s'il vous plaît!<p>";
}
else {
$array_chaine=explode(" ",$_POST[text]);
$query="SELECT * FROM recherche WHERE ";
for($i=0;$i<sizeof($array_chaine);$i++){
if($i>0){$query.=" OR ";}
$query.="recherche_motscles = '$array_chaine[$i]'";
}
$query.= " ORDER BY recherche_priority ASC ";
$req = mysql_query($query)
or die ("erreur req ".mysql_error());
$res= mysql_numrows($req);
print 'Pour le mot '.$recherche.' il y\'a '.$res.' résultats <br>';
while( $sortie = mysql_fetch_array($req))
{
print '<br / >';
print '<font class="titre"><a href="'.$sortie['recherche_url'].'">'.$sortie['recherche_titre'].'</a></font><br / >';
print $sortie['recherche_description'].'<br /><br />';
print '<b><a href="'.$sortie['recherche_url'].'"><img src="images/picto-noir.gif"> Voire la page'.'</b></a><br /><hr>';
}
}
mysql_close();
?>
J'ai donc 0 résultats quelque soit les mots-clés entrés, est-ce que tu as une idée d'où ça vient ?? j'ai du faire une erreur au niveau des requêtes, si tu peux m'aider ??
Merci beaucoup a+
<? ...
if (($_POST["text"] == "")||($_POST["text"] == "%")) {
echo "Veuillez entrer un mot clé s'il vous plaît!<p>";
}
else {
$array_chaine=explode(" ",$_POST[text]);
$query="SELECT * FROM recherche WHERE ";
for($i=0;$i<sizeof($array_chaine);$i++){
if($i>0){$query.=" OR ";}
$query.="recherche_motscles = '$array_chaine[$i]'";
}
$query.= " ORDER BY recherche_priority ASC ";
$req = mysql_query($query)
or die ("erreur req ".mysql_error());
$res= mysql_numrows($req);
print 'Pour le mot '.$recherche.' il y\'a '.$res.' résultats <br>';
while( $sortie = mysql_fetch_array($req))
{
print '<br / >';
print '<font class="titre"><a href="'.$sortie['recherche_url'].'">'.$sortie['recherche_titre'].'</a></font><br / >';
print $sortie['recherche_description'].'<br /><br />';
print '<b><a href="'.$sortie['recherche_url'].'"><img src="images/picto-noir.gif"> Voire la page'.'</b></a><br /><hr>';
}
}
mysql_close();
?>
J'ai donc 0 résultats quelque soit les mots-clés entrés, est-ce que tu as une idée d'où ça vient ?? j'ai du faire une erreur au niveau des requêtes, si tu peux m'aider ??
Merci beaucoup a+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
qqs erreurs:
d'abord le tag php normalisé n'est pas <? mais <?php
erreur aussi mysql_numrows(..) c'est mysql_num_rows(...)
print 'Pour le mot '.$recherche.' il y\'a '.$res.' résultats <br>';
je ne vois pas ou est la variable $recherche
essayes comme ça, avec des echo:
d'abord le tag php normalisé n'est pas <? mais <?php
erreur aussi mysql_numrows(..) c'est mysql_num_rows(...)
print 'Pour le mot '.$recherche.' il y\'a '.$res.' résultats <br>';
je ne vois pas ou est la variable $recherche
essayes comme ça, avec des echo:
<?php ... if (($_POST["text"] == "")||($_POST["text"] == "%")) { echo "Veuillez entrer un mot clé s'il vous plaît!<p>"; } else { $array_chaine=explode(" ",$_POST[text]); //echo pour voir si on explode bien la chaine correctrement, tu dois avoir Array (0=> mot1 1=> etc..) echo "<pre>"; print_r($array_chaine); echo "</pre>"; $query="SELECT * FROM recherche WHERE "; for($i=0;$i<sizeof($array_chaine);$i++){ if($i>0){$query.=" OR ";} $query.="recherche_motscles = '$array_chaine[$i]'"; } $query.= " ORDER BY recherche_priority ASC "; // echo pour vois si la requette est correcte echo "Requette generee: ".$query; $req = mysql_query($query) or die ("erreur req ".mysql_error()); $res= mysql_num_rows($req); print 'Pour le mot '.$recherche.' il y\'a '.$res.' résultats <br>'; while( $sortie = mysql_fetch_array($req)) { print '<br / >'; print '<font class="titre"><a href="'.$sortie['recherche_url'].'">'.$sortie['recherche_titre'].'</a>& lt;/font><br / >'; print $sortie['recherche_description'].'<br /><br />'; print '<b><a href="'.$sortie['recherche_url'].'"><img src="images/picto-noir.gif"> Voire la page'.'</b></a><br /><hr>'; } } mysql_close(); ?>
Ok merci des conseils, je viens de tester...
Mais le problème de cette requête, c'est qu'elle recherche une cellule qui est strictement égale à la recherche. Par exemple, si je recherche "Cinema" et que dans mes mots-clés il y a "cinema stylo enceinte", elle ne va pas m'indiquer cette ligne, alors que c'est ce que je souhaite, afficher toutes les lignes qui contiennent un mot-clés de bon.
Et en mettant le "LIKE %...%"comme indiqué plus haut, la requête découpe l'intérieur des mots. Par exemple, si je tape en recherche "photo de roger" ça va rechercher tous les mots qui contiennent "photo" ou "de" ou "roger", et donc si dans mes mots-clés il y a "description" ça va s'afficher car ça contient "de", si il y a "photomontage" ca va s'afficher car ca contient "photo", etc... alors que les mots-clés ne sont pas exacts.
Est-ce qu'il existe une solution au problème ? Comment faire pour rechercher mot par mot, sans recherche une cellule exacte, ou sans découper l'intérieur des mots ? Comment font les autres moteurs de recherche ?
merci, a+
Mais le problème de cette requête, c'est qu'elle recherche une cellule qui est strictement égale à la recherche. Par exemple, si je recherche "Cinema" et que dans mes mots-clés il y a "cinema stylo enceinte", elle ne va pas m'indiquer cette ligne, alors que c'est ce que je souhaite, afficher toutes les lignes qui contiennent un mot-clés de bon.
Et en mettant le "LIKE %...%"comme indiqué plus haut, la requête découpe l'intérieur des mots. Par exemple, si je tape en recherche "photo de roger" ça va rechercher tous les mots qui contiennent "photo" ou "de" ou "roger", et donc si dans mes mots-clés il y a "description" ça va s'afficher car ça contient "de", si il y a "photomontage" ca va s'afficher car ca contient "photo", etc... alors que les mots-clés ne sont pas exacts.
Est-ce qu'il existe une solution au problème ? Comment faire pour rechercher mot par mot, sans recherche une cellule exacte, ou sans découper l'intérieur des mots ? Comment font les autres moteurs de recherche ?
merci, a+
Alors tu ne mets pas LIKE mais =
et tu peux faire une recherche par pertinence, c'est à dire:
- tu fais une premiere recherche avec = "la chaine complete"
si pas de resultat:
- nouvelle recherche avec les premiers mots
si pas de resultat
_ nouvelle recherche avec explode et mot par mot et pour eviter de rechercher les "de" " la" etc..
tu peux tester le longueur du mot si <=2 tu ne rajoutes pas la condition dans la boucle
ce n'est qu'une piste de réflexion ???
et tu peux faire une recherche par pertinence, c'est à dire:
- tu fais une premiere recherche avec = "la chaine complete"
si pas de resultat:
- nouvelle recherche avec les premiers mots
si pas de resultat
_ nouvelle recherche avec explode et mot par mot et pour eviter de rechercher les "de" " la" etc..
tu peux tester le longueur du mot si <=2 tu ne rajoutes pas la condition dans la boucle
ce n'est qu'une piste de réflexion ???
merci c'est effectivement une bonne idée, je viens d'appliquer à peu près ta proposition :
1- recherche avec la "chaine complète"
2- recherche "mot par mot"
à priori, ça ça marche, mais sur la 2e partie, j'aimerais comme tu le souligne faire un bis pour tester la longueur du mot et mettre de côté les mots inférieurs ou égaux à 3, comment faire ?
Il faut que j'utilise la fonction " strlen($i) " c'est bien ça?... Mais comment définir pour que chaque mot soit traité un par un pour savoir s'ils sont supérieur à 3, et que dire à ceux qui sont inférieur 3 pour les esquiver ? Je pense qu'il me manque encore quelque compétence pour élaborer ça de moi même sans aide... As-tu une idée ?
merci encore! a+
1- recherche avec la "chaine complète"
2- recherche "mot par mot"
à priori, ça ça marche, mais sur la 2e partie, j'aimerais comme tu le souligne faire un bis pour tester la longueur du mot et mettre de côté les mots inférieurs ou égaux à 3, comment faire ?
Il faut que j'utilise la fonction " strlen($i) " c'est bien ça?... Mais comment définir pour que chaque mot soit traité un par un pour savoir s'ils sont supérieur à 3, et que dire à ceux qui sont inférieur 3 pour les esquiver ? Je pense qu'il me manque encore quelque compétence pour élaborer ça de moi même sans aide... As-tu une idée ?
merci encore! a+
je te marque le code source ce sera peut-être plus facile :
...
if (($_POST["text"] == "")||($_POST["text"] == "%")) {
echo "Veuillez entrer un mot clé s'il vous plaît!<p>";
}
else {
$req = mysql_query("SELECT * from recherche where recherche_motscles LIKE '%$_POST[text]%' ORDER BY recherche_priority ASC ")
or die ("erreur req ".mysql_error());
$res= mysql_num_rows($req);
if ($res>0) {
echo 'Pour le mot '.$recherche.' il y\'a '.$res.' résultats <br>';
while( $sortie = mysql_fetch_array($req))
{
echo '<br / >';
echo '<font class="titre"><a href="'.$sortie['recherche_url'].'">'.$sortie['recherche_titre'].'</a></font><br / >';
echo $sortie['recherche_description'].'<br /><br />';
echo '<b><a href="'.$sortie['recherche_url'].'"><img src="images/picto-noir.gif"> Voire la page'.'</b></a><br /><hr>';
}
}
else {
$array_chaine=explode(" ",$_POST[text]);
//echo pour voir si on explode bien la chaine correctrement, tu dois avoir Array (0=> mot1 1=> etc..)
echo "<pre>";
print_r($array_chaine);
echo "</pre>";
$query="SELECT * FROM recherche WHERE ";
for($i=0;$i<sizeof($array_chaine);$i++){
if($i>0){$query.=" OR ";}
$query.="recherche_motscles = '$array_chaine[$i]'";
}
$query.= " ORDER BY recherche_priority ASC ";
echo "Requette generee: ".$query;
$reqx = mysql_query($query)
or die ("erreur req ".mysql_error());
$res= mysql_num_rows($reqx);
echo 'Pour le mot '.$recherche.' il y\'a '.$res.' résultats <br>';
while( $sortie = mysql_fetch_array($reqx))
{
echo '<br / >';
echo '<font class="titre"><a href="'.$sortie['recherche_url'].'">'.$sortie['recherche_titre'].'</a></font><br / >';
echo $sortie['recherche_description'].'<br /><br />';
echo '<b><a href="'.$sortie['recherche_url'].'"><img src="images/picto-noir.gif"> Voire la page'.'</b></a><br /><hr>';
}
}
}
...
...
if (($_POST["text"] == "")||($_POST["text"] == "%")) {
echo "Veuillez entrer un mot clé s'il vous plaît!<p>";
}
else {
$req = mysql_query("SELECT * from recherche where recherche_motscles LIKE '%$_POST[text]%' ORDER BY recherche_priority ASC ")
or die ("erreur req ".mysql_error());
$res= mysql_num_rows($req);
if ($res>0) {
echo 'Pour le mot '.$recherche.' il y\'a '.$res.' résultats <br>';
while( $sortie = mysql_fetch_array($req))
{
echo '<br / >';
echo '<font class="titre"><a href="'.$sortie['recherche_url'].'">'.$sortie['recherche_titre'].'</a></font><br / >';
echo $sortie['recherche_description'].'<br /><br />';
echo '<b><a href="'.$sortie['recherche_url'].'"><img src="images/picto-noir.gif"> Voire la page'.'</b></a><br /><hr>';
}
}
else {
$array_chaine=explode(" ",$_POST[text]);
//echo pour voir si on explode bien la chaine correctrement, tu dois avoir Array (0=> mot1 1=> etc..)
echo "<pre>";
print_r($array_chaine);
echo "</pre>";
$query="SELECT * FROM recherche WHERE ";
for($i=0;$i<sizeof($array_chaine);$i++){
if($i>0){$query.=" OR ";}
$query.="recherche_motscles = '$array_chaine[$i]'";
}
$query.= " ORDER BY recherche_priority ASC ";
echo "Requette generee: ".$query;
$reqx = mysql_query($query)
or die ("erreur req ".mysql_error());
$res= mysql_num_rows($reqx);
echo 'Pour le mot '.$recherche.' il y\'a '.$res.' résultats <br>';
while( $sortie = mysql_fetch_array($reqx))
{
echo '<br / >';
echo '<font class="titre"><a href="'.$sortie['recherche_url'].'">'.$sortie['recherche_titre'].'</a></font><br / >';
echo $sortie['recherche_description'].'<br /><br />';
echo '<b><a href="'.$sortie['recherche_url'].'"><img src="images/picto-noir.gif"> Voire la page'.'</b></a><br /><hr>';
}
}
}
...
Deux lignes a rajouter dans cette partie là:
else { $array_chaine=explode(" ",$_POST[text]); //echo pour voir si on explode bien la chaine correctrement, tu dois avoir Array (0=> mot1 1=> etc..) echo "<pre>"; print_r($array_chaine); echo "</pre>"; $query="SELECT * FROM recherche WHERE "; for($i=0;$i<sizeof($array_chaine);$i++){ if(strlen($array_chaine[$i])>2){ // on ne tient compte que des mots de plus de 2 lettres if($i>0){$query.=" OR ";} $query.="recherche_motscles = '$array_chaine[$i]'"; } } $query.= " ORDER BY recherche_priority ASC "; echo "Requette generee: ".$query;