Comment faire 1recherche avec plusieurs mots?
chanteur06
Messages postés
131
Statut
Membre
-
chanteur06 Messages postés 131 Statut Membre -
chanteur06 Messages postés 131 Statut Membre -
Bonjour,
Je pensais trouver sur Google, mais rien à cette heure ci.
Je veux inclure plusieurs critères,plusieurs mots dans la barre de recherche unique et afficher le résultat trouvé.
Ex:plage cannes Résultat:doit afficher les résultats des champs contenant "plage" et "cannes" de la même table.
Je pensais utiliser "simplement" AND ou OR mais ça n'a pas l'air d'être la bonne formule...
Si quelqu'un peut me guider...
Je suis sur WAMP
Merci
[code]
$table = "resto"; // Table à sélectionner dans la base
$champ = "city"; // Champ de la table à afficher pour tester ce script
$champ2 = "title";
$champ3 = "id";
$sql = "SELECT city, title,id FROM $table WHERE $champ,$champ2 LIKE '%".addslashes($recherche)."%' OR $champ2 LIKE '%".addslashes($recherche)."%' ORDER BY title";
[/code]
...en esperant que ce bout de code soit suffisant
Je pensais trouver sur Google, mais rien à cette heure ci.
Je veux inclure plusieurs critères,plusieurs mots dans la barre de recherche unique et afficher le résultat trouvé.
Ex:plage cannes Résultat:doit afficher les résultats des champs contenant "plage" et "cannes" de la même table.
Je pensais utiliser "simplement" AND ou OR mais ça n'a pas l'air d'être la bonne formule...
Si quelqu'un peut me guider...
Je suis sur WAMP
Merci
[code]
$table = "resto"; // Table à sélectionner dans la base
$champ = "city"; // Champ de la table à afficher pour tester ce script
$champ2 = "title";
$champ3 = "id";
$sql = "SELECT city, title,id FROM $table WHERE $champ,$champ2 LIKE '%".addslashes($recherche)."%' OR $champ2 LIKE '%".addslashes($recherche)."%' ORDER BY title";
[/code]
...en esperant que ce bout de code soit suffisant
A voir également:
- Comment faire 1recherche avec plusieurs mots?
- Retrouver un film avec des mots - Télécharger - Divers TV & Vidéo
- Mots de passe enregistrés - Guide
- Générateur de mots - Télécharger - Sécurité
- Comment savoir si mes mots de passe sont compromis - Guide
- Comment trouver le mot de passe wifi sur son téléphone - Guide
2 réponses
Ok, si tes motifs de recherche sont séparés par des espaces, on garde le même principe de boucle que tout à l'heure, démonstration:
1. tu construit ta requête :
$sql = "SELECT city, title,id FROM $table WHERE ";
//debut de ta requête.
//Ensuite, je suppose que le motif de ta recherche arrive d'un formulaire par la method post.
//On suppose que la variable que tu récupère s'appelle $_POST['find']
$var=explode(" ",$_POST['find']); //on explode la variable qui contient les motifs séparés pas des espaces.
if (is_array($var)) { //on vérifie qu'il y a bien plusieurs motifs (ça ne sera pas forcement toujours le cas)
$nbrow=count($var);
$test=1; //on initialise une variable pour savoir ou on en est dans le foreach
foreach($var as $value) { //on traite toutes les lignes du tableau créé par explode() et on complète la requête
$sql .= "$champ LIKE '%".$value."%' OR $champ2 LIKE '%".$value."%'";
$sql .= ($nbrow>$test) ? ' OR ' : ' ORDER BY title'; //si il reste des lignes dans le tableau, on ajoute OR
ou on termine la requête ORDER BY blablabla...
$test++; //on incrémente la variable (voir com plus haut)
}
} //s'il n'y a qu'un mot dans le motif de recherche, on construit la requête normalement.
else $sql = "SELECT city, title,id FROM $table WHERE $champ LIKE '%".$_POST['find']."%' OR $champ2 LIKE '%".$_POST['find']."%' ORDER BY title";
2. tu l'exploite normalement...
Voila
C'est pas très propre, mais ça marche (j'ai essayé...)
1. tu construit ta requête :
$sql = "SELECT city, title,id FROM $table WHERE ";
//debut de ta requête.
//Ensuite, je suppose que le motif de ta recherche arrive d'un formulaire par la method post.
//On suppose que la variable que tu récupère s'appelle $_POST['find']
$var=explode(" ",$_POST['find']); //on explode la variable qui contient les motifs séparés pas des espaces.
if (is_array($var)) { //on vérifie qu'il y a bien plusieurs motifs (ça ne sera pas forcement toujours le cas)
$nbrow=count($var);
$test=1; //on initialise une variable pour savoir ou on en est dans le foreach
foreach($var as $value) { //on traite toutes les lignes du tableau créé par explode() et on complète la requête
$sql .= "$champ LIKE '%".$value."%' OR $champ2 LIKE '%".$value."%'";
$sql .= ($nbrow>$test) ? ' OR ' : ' ORDER BY title'; //si il reste des lignes dans le tableau, on ajoute OR
ou on termine la requête ORDER BY blablabla...
$test++; //on incrémente la variable (voir com plus haut)
}
} //s'il n'y a qu'un mot dans le motif de recherche, on construit la requête normalement.
else $sql = "SELECT city, title,id FROM $table WHERE $champ LIKE '%".$_POST['find']."%' OR $champ2 LIKE '%".$_POST['find']."%' ORDER BY title";
2. tu l'exploite normalement...
Voila
C'est pas très propre, mais ça marche (j'ai essayé...)
J'oubliais, respecte bien les espaces pour la construction de la requête dans le foreach(), sinon, ça ne marchera pas... Tu t'en doute sûrement mais bon, si tu n'a pas l'habitude de ce genre de bidouille...
Et si tu veux faire plus propre, le $sql = "SELECT city, title,id FROM $table WHERE "; (le début de la requête quoi), intègres le dans le if (is_array($var)), sinon, c'est une ligne qui ne sert à rien... et ça sera plus lisible! ;)
Et si tu veux faire plus propre, le $sql = "SELECT city, title,id FROM $table WHERE "; (le début de la requête quoi), intègres le dans le if (is_array($var)), sinon, c'est une ligne qui ne sert à rien... et ça sera plus lisible! ;)
$table = "resto"; // Table à sélectionner dans la base
$champ = "city"; // Champ de la table à afficher pour tester ce script
$champ2 = "title";
$champ3 = "id";
$sql = "SELECT city, title,id FROM $table WHERE $champ LIKE '%".addslashes($recherche)."%' OR $champ2 LIKE '%".addslashes($recherche)."%' ORDER BY title";
(.....................)
// On affiche le résultat de la requête
// On crée donc ici son propre tableau pour lequel on souhaite une pagination
while ($ligne = mysql_fetch_array($result)) {
echo (explode('|',"<a href=\"affichage.php?id=".$ligne[$champ3]."\">".$ligne[$champ]."\n\n".$ligne[$champ2]."</a><br />\n"));
}
si ce sont des espaces que tu veux exploder déjà, avec "|", t'as tout faut..
et si c'est $champ que tu veux exploder, essaie :
while ($ligne = mysql_fetch_array($result)) {
$var=explode(' ',$ligne['champ']);
echo "<a href=\"affichage.php?id=".$ligne[$champ3]."\">";
foreach($var as $value) {
echo $value."\n\n";
}
echo $ligne[$champ2]."</a><br />\n";
}
"A plage,cannes, il y a 0 restaurants,soit un total de 0 pages."
Donc le changement devient juste l'apparition de virgules...
Essaie d'être plus clair stp
j'aimerais pouvoir rentrer plusieurs critères dans la recherche,qui peuvent correspondre à ville et/ou nom et être affichés.Là le renvoie est à 0 quand on entre plusieurs mots,alors que la recherche est OK avec un mot,soit la ville soit le nom.