aide svp : requete sql => MATCH() AGAINST()

Nouveau WRInaute
Bonjour tout le monde

Je suis en train de créé un site, qui necessite une base de donnée (qui sera assez conséquente a term) et j'ai donc opter pour un moteur de recherche dont la requete sql serait :
$selection_recherche = mysql_query("SELECT * FROM recherche WHERE MATCH (titre,description,article,adresse) AGAINST ('$recherche') ORDER BY id ASC");
car MATCH() AGAINST() est plus léger que LIKE

Le problème est le suivant : si je ne tape pas exactement le mot que je cherche ex: titre, mais que je tape juste "titr", impossible de trouver l'article
Est ce qu'il existe un équivalent aux "%" pour la requete LIKE, qui ressemblerait à : ('%$recherche%')

merci d'avance
 
Nouveau WRInaute
Finalement, après une nuit de recherche, je viens de trouver !
Voici ma nouvelle requete : $selection_recherche = mysql_query("SELECT * FROM recherche WHERE MATCH (titre,description,article,adresse) AGAINST ('$recherche*' IN BOOLEAN MODE) ORDER BY id ASC");

Malheureusement, elle lorsqu'on recherche "mot1 mot2", le résultat de la recherche comporte : "mot1 mot2" mais aussi "mot1" ou encore "mot2", alors que je voudrais qu'il n'affiche que les articles contenant les deux mots "mot1 mot2"

Auriez vous une idée?
 
Nouveau WRInaute
oui mais si je mets : + $mot1* + $mot2*
avec les " * " ca ne fonctionne pas, bizarrement il me donne les resultats contenants mot2
 
Nouveau WRInaute
en fait c'est bon, il fallait coller le + au mot, merci beaucoup pour votre réponse, mon moteur de recherche est enfin terminé ! !
Voila si ça peut aider quelqu'un, un moteur de recherche sur plusieurs tables, avec plusieurs mots dans la recherche

if (isset($_POST['rechercher'])) //si on a validé le formulaire
{
$recherche = mysql_real_escape_string(htmlspecialchars($_POST['recherche'])); //sécurisation des variables
$recherche=strtolower($recherche); //on passe en minuscule
$mots = str_replace("+", " ", trim($recherche)); //on remplace les + par des espaces
$mots = str_replace("\"", " ", $mots); //idem pour \
$mots = str_replace(",", " ", $mots); //idem pour ,
$mots = str_replace(":", " ", $mots); //idem pour :

$donnee=explode(" " , $mots);

$mot1 = $donnee[0];
$mot2 = $donnee[1];
$mot3 = $donnee[2];
$mot4 = $donnee[3];
$mot5 = $donnee[4];


$nombre_mots = count($donnee); //comptage du nombre de mots

for($nombre_mots_boucle = 0; $nombre_mots_boucle < $nombre_mots; $nombre_mots_boucle++) //tant que le nombre de mots de la recherche est supérieur à celui de la boucle, on continue en incrémentant à chaque fois le nombre de mots
{
$selection_recherche = mysql_query("SELECT * FROM recherche
WHERE MATCH (titre,description,article,adresse) AGAINST (' +$mot1* +$mot2* +$mot3* +$mot4* +$mot5*' IN BOOLEAN MODE) ORDER BY id ASC"); //requête contenant le résultat de la boucle
}

$nombre_resultats = mysql_num_rows($selection_recherche); //comptage du nombre d'entrées sélectionnées par la recherche

}
 
Discussions similaires
Haut