Recherche plusieurs mots clés

alibi74 Messages postés 8 Statut Membre -  
asmaanoor Messages postés 90 Statut Membre -
Bonjour,

je bosse sur le moteur de recherche de mon site et je rencontre quelques problèmes.
Je m'explique:

je souhaite que ce moteur puisse rechercher plusieurs mots clés. J'ai donc ces lignes de codes:

//...
$mot = ( $_POST['mot'] );
// Extraction des mots clefs
$mots = explode( " ", $mot );
if( count( $mots ) > 0 ) {
//
$query = "SELECT * FROM table WHERE ";
for( $i = 0; $i < count( $mots ); $i++ ) {
$query .= "titre LIKE '%". $mots[$i] ."%' OR contenu LIKE '%". $mots[$i] ."%'";
if( $i < count( $mots ) - 1 )
$query .= " OR ";
}
$query .= " ORDER BY date ASC";
$reponse = mysql_query( $query ) or die( mysql_error() );

Mon problème est que lors d'une recherche avec 2 mots clés par exemple, il me renvoi même les articles contenant un seul des mots clés contenu dans la requète. Comme l'affichage se fais par date ASC, l'affichage des resultats ne me convient pas du tout.

Quelqu'un a t-il une idée ? Merci d'avance.
A voir également:

6 réponses

scriptiz Messages postés 1494 Statut Membre 425
 
C'est normal qu'il te retourne les trucs avec un seul des mots clés car tu fait :

LIKE "%ceci%"
OR
LIKE "%cela%"

Donc en gros tu demande qu'il contient soit ceci, soit cela, soit les deux.

Si tu veux qu'il contienne les deux tu dois faire :
LIKE "%ceci%"
AND
LIKE "%cela%"

Par contre entre le titre et le contenu je te conseille de garder un OR

Tu peux utilise des parenthèses aussi, donc au final ça te donnera en simplifier qqch comme ceci :

WHERE (titre LIKE "%ceci%" OR contenu LIKE "%ceci%")
AND (titre LIKE "%cela%" OR contenu LIKE "%cela%")
AND (titre LIKE "%autre%" OR contenu LIKE "%autre%")


0
alibi74 Messages postés 8 Statut Membre
 
ok donc si je comprend bien il va falloir que je code afin de dissocier chaque mot de la requête genre $mots1, $mots2....c'est bien cela ?

Je cherche mais je n'arrive pas a integrer le AND dans ma requète. Merci quand même.
0
scriptiz Messages postés 1494 Statut Membre 425
 
bah tu as déjà mis le OR ^^
0
alibi74 Messages postés 8 Statut Membre
 
Bon ben j'ai retravaillé mon code mais il me met un "parse error" pour la ligne que j'ai soulignée...j'suis encore loin d'être un expert en php donc la je craque...

//...
$mot = ( $_POST['mot'] );
// Extraction des mots clefs
$mots = explode( " ", $mot );
$i = count( $mots )
{

$query = "SELECT * FROM table WHERE ";
for( $i = 0; $i < count( $mots ); $i++ )
{
$query .= "titre LIKE '%". $mots[0] ."%' OR contenu LIKE '%". $mots[0] ."%' ";
"AND titre LIKE '%". $mots[1] ."%' OR contenu LIKE '%". $mots[1] ."%' ";
}
$query .= " ORDER BY date ASC";
$reponse = mysql_query( $query ) or die( mysql_error() );
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Hydror34 Messages postés 1 Statut Membre
 
$query = "AND titre LIKE '%". $mots[0]."%' AND titre LIKE '%". $mots[1]."%'";
0
asmaanoor Messages postés 90 Statut Membre 18
 
Assalamo 3laykom,

je pense que j'ai bien adapté ton code

$mot = ( $_POST['mot'] );
// Extraction des mots clefs
$mots = explode( " ", $mot );
$i = count( $mots );

$query = "SELECT * FROM table WHERE ";
for( $i = 0; $i < count( $mots ); $i++ ){
if($i==0)
{
$query .= "(titre LIKE '%$mots[$i]%' OR contenu LIKE '%$mots[$i]%') ";

}
else{
$query .="AND (titre LIKE '%$mots[$i]%' OR contenu LIKE '%$mots[$i]%' ) ";
}
}
$query .= " ORDER BY date ASC";

Bon courage ;)
0