Bonjour.
En fait, si tu veux accepter plus d'un mot clé, il faut :
1. Définir le fonctionnement (mot1 ET mot2, mot1 OU mot2, au choix, etc.)
2. Regarder le nombre de mots de ta requête.
3. Pour chaque mot, rajouter une clause à ta condition.
Optionnel, mais fortement conseillé : empêcher les requêtes sur plus de X mots, et sur des mots trop courts...
Pareil, faire une recherche avec des clause LIKE sur plusieurs champs, tu risques de te retrouver rapidement avec des requêtes très lourdes.
$separateur = ' '; // Par exemple. On peut forcer un autre séparateur, comme '+'.
$mots_cherches = explode($separateur, $requete); // On récupère un tableau des mots recherchés
$clause = ''; // On initialise la variable qui sert à récupérer la clause WHERE
foreach ($mot_cherches as $mot) { // On scanne les mots, pour contruire la clause WHERE
if (!empty ( $clause)) { // => si on n'en est pas au premier mot
$clause .= ' AND '; // Si on veut récupérer les annonces qui contiennent TOUS les mots...
}
$clause .= "(titre LIKE '%$mot%' OR annonce like '%$mot%' OR auteur like '%$mot%')"; // La requête à passer pour un mot
}
$query = mysql_query("SELECT * FROM annonces WHERE $clause;") or die (mysql_error()); // la requête, que vous devez maintenant comprendre
Autres problèmes à gérer :
- Majuscules/minuscules (si je cherche toto, il faut que je récupère l'annonce "Toto passe une annonce")
- Accents.
- (Dans l'idéal) fautes.
Bonjour.
En fait, si tu veux accepter plus d'un mot clé, il faut :
1. Définir le fonctionnement (mot1 ET mot2, mot1 OU mot2, au choix, etc.)
2. Regarder le nombre de mots de ta requête.
3. Pour chaque mot, rajouter une clause à ta condition.
Optionnel, mais fortement conseillé : empêcher les requêtes sur plus de X mots, et sur des mots trop courts...
Pareil, faire une recherche avec des clause LIKE sur plusieurs champs, tu risques de te retrouver rapidement avec des requêtes très lourdes.
[php]$separateur = ' '; // Par exemple. On peut forcer un autre séparateur, comme '+'.
$mots_cherches = explode($separateur, $requete); // On récupère un tableau des mots recherchés
$clause = ''; // On initialise la variable qui sert à récupérer la clause WHERE
foreach ($mot_cherches as $mot) { // On scanne les mots, pour contruire la clause WHERE
if (!empty ( $clause)) { // => si on n'en est pas au premier mot
$clause .= ' AND '; // Si on veut récupérer les annonces qui contiennent TOUS les mots...
}
$clause .= "(titre LIKE '%$mot%' OR annonce like '%$mot%' OR auteur like '%$mot%')"; // La requête à passer pour un mot
}
$query = mysql_query("SELECT * FROM annonces WHERE $clause;") or die (mysql_error()); // la requête, que vous devez maintenant comprendre
[/php]
Autres problèmes à gérer :
- Majuscules/minuscules (si je cherche toto, il faut que je récupère l'annonce "Toto passe une annonce")
- Accents.
- (Dans l'idéal) fautes.