Recherche plusieurs mots clés
alibi74
Messages postés
8
Statut
Membre
-
asmaanoor Messages postés 90 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.
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:
- Recherche plusieurs mots clés
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Cles windows 10 - Guide
- Rechercher ou entrer l'adresse mm - recherche google - Guide
- Recherche image - Guide
- Retrouver un film avec des mots - Télécharger - Divers TV & Vidéo
6 réponses
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 :
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%")
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.
Je cherche mais je n'arrive pas a integrer le AND dans ma requète. Merci quand même.
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() );
}
//...
$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() );
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 ;)
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 ;)