Page 1 sur 1

Recherche sur plusieurs mots clés

Posté : 02 mars 2005, 11:56
par dudu59
Hello à tous,

J'ai actuellement un moteur de recheche interne qui me permet de mettre en relief un mot clé parmis tous ceux attachés à une photo dans une popup, chaque mot étant cliquable individuellement. J'aimerai pouvoir faire la même opération si plusieurs mots clés sont appelés.

Pour info, le(s) mot(s) est(sont) placé(s) dans une variable de session pour pouvoir le(s) conserver tout au long de la visite tant qu'une nouvelle recherche n'est pas faite.

SCRIPTS :

1 - recherche des mots clés de la photo :

Code : Tout sélectionner

$requete = "SELECT * from mabase WHERE id_photo='$id_photo'"; $result = MYSQL_QUERY($requete); $mots = mysql_result($result,0,"mots");
2 - éclatement de la liste de la photo séparée par des espaces et comparaison avec le(s) mot(s) recherché(s) = $motcherche :

Code : Tout sélectionner

$tab = explode(" ",$mots); for($i=0;is_array($tab) && isset($tab[$i]); $i++) { $motcle = $tab[$i]; if($motcle == $motcherche) { echo "<SPAN class=souligne>$motcle</span>\n"; } else { echo " <a href=rechercher.php?mot=$motcle>$motcle</a>\n"; } }
Problème : je n'arrive pas à effectuer la même opération si la recherche est effectuée sur 2 ou + mots clés et qu'il ne se suivent pas dans la liste des mots clés attachés à la photo.

Exemple : si vous recherchez "ciel", ok.
Si vous recherchez "ciel nuage", ne marche pas si "ciel" et "nuage" ne se suivent pas exactement. Idem si "nuages" est au pluriel.

Site visible ici : http://www.imagetheque.com

Si vous savez m'aider... :wink:

Posté : 02 mars 2005, 16:07
par Ouaibou
Bonjour,

Une solution possible est le LIKE de MySql pour cela tu peux aller voir cet article :

http://www.phpdebutant.org/article63.php

Tout en bas de la page tu as deux exemples d'utilisation de LIKE.

Le résultat que tu obtiens est certe peut être pas excellent mais les autres méthodes comme celle d'utiliser soundex ou la distance levenstein et beaucoup plus dure à mettre en oeuvre et pas toujours très efficace pour des recherche en français (soundex).

Bonne chance :wink:

@+

Posté : 02 mars 2005, 18:07
par crab
Une solution serait de faire en sorte que $motrecherche soit un array
puis de tester si $motcle est dans le tableau avec la fonction in_array()

exemple possible:
// mot recherche est maintenant de type array (suite a un explode ou autre)
$tab = explode(" ",$mots);

for($i=0;is_array($tab) && isset($tab[$i]); $i++)
{
$motcle = $tab[$i];
if(in_array($motcle, $motcherche))
{
echo "<SPAN class=souligne>$motcle</span>\n";
}
else
{
echo "
<a href=rechercher.php?mot=$motcle>$motcle</a>\n";
}
}
A tester ...

Posté : 02 mars 2005, 22:05
par dudu59
Merci beaucoup CRAB.:D
CA MARCHE IMPECABLEMENT.

J'ai en effet éclaté $motcherche en array et comparé avec l'autre array :

Code : Tout sélectionner

$tab = explode(" ",$mots); $tabrecherche = explode(" ",$motcherche); for($i=0;is_array($tab) && isset($tab[$i]); $i++) { $motcle = $tab[$i]; if(in_array($motcle,$tabrecherche)) { echo "<SPAN class=souligne>$motcle</span>\n"; } else { echo " <a href=rechercher.php?mot=$motcle>$motcle</a>\n"; } }
Merci encore et à bientôt.

Posté : 02 mars 2005, 22:45
par Invité
pas de quoi ;-)