Moteur de recherche mais comment.... ?

WRInaute passionné
Bonjour,
je sui en train de créer un annuaire en php et j'aurais besoin d'un moteur de recherche mais je sais pas trop comment procédé, j'ai regardé la requète de scripts deja fait mais je comprend pas trop le principe...j'préfère pas mettre de code que je ne comprend pas...
Alors voici à quoi ça ressemble :



Code:
$sql = "SELECT title,url,description FROM annuaire WHERE description LIKE '%$q%' ORDER BY title ASC"; 
$req = mysql_query($sql) or die('Erreur SQL !'.mysql_error());

Cette requète marche bien si on recherche avec UN MOT mais comment faire si il y a un ou plsieurs mots ?

Je vois ce qu'il faut faire mais je ne vois pas comment !

à priporis il faut ajouter des OR à la variable $q ! ... mais comment ?

:lol:
:?:

merci pour ceux qui m'aiderons !
 
A
Anonymous
Guest
Salut,
Le principe c'est de décomposer ta requête :

Code:
$sql = "SELECT title,url,description FROM annuaire WHERE description LIKE '%$q%' ";

$sql.= " or like '%$r%'";
$sql.=" or like '%$s%'";
$sql.=" or like '%$t%'";

$sql.=" ORDER BY title ASC"; 
$req = mysql_query($sql) or die('Erreur SQL !'.mysql_error());


bien sûr il faut décomposer avec un foreach pour obtenir une boucle qui prnedra en compte le nombre de termes exacts rentrés dans le input de saisie. Mais le principe est là.
 
WRInaute passionné
D'abord tu utilises explode() pour séparer ta phrase en mots, que tu récupèreras dans un tableau. Il te faudra ensuite faire une boucle sur ce tableau en concaténant ta requête à chaque itération.

Exemple :

Code:
<?php

//_____ $_GET['recherche'] est le contenu du champ de formulaire

// séparation en mots
$mots = explode(' ', $_GET['recherche']);

// debut de la requête
$sql = 'SELECT title,url,description FROM annuaire WHERE 0'; 

// construction de la requete avec les différents mots
foreach ($mots as $m) {
     $sql .= " OR (description LIKE '%".$m."%')";
}

// fin de la requête
$sql .= ' ORDER BY title';

// suite...
?>

Fred
 
WRInaute discret
George Abitbol a dit:
D'abord tu utilises explode() pour séparer ta phrase en mots, que tu récupèreras dans un tableau. Il te faudra ensuite faire une boucle sur ce tableau en concaténant ta requête à chaque itération.

Exemple :

Code:
<?php

//_____ $_GET['recherche'] est le contenu du champ de formulaire

// séparation en mots
$mots = explode(' ', $_GET['recherche']);

// debut de la requête
$sql = 'SELECT title,url,description FROM annuaire WHERE 0'; 

// construction de la requete avec les différents mots
foreach ($mots as $m) {
     $sql .= " OR (description LIKE '%".$m."%')";
}

// fin de la requête
$sql .= ' ORDER BY title';

// suite...
?>

Fred

Ca, c'est un beau code, simple et clair comme je les aime.
Bien joué Fred
 
Discussions similaires
Haut