recherche par mos clés

Eléphant du PHP | 297 Messages

26 juil. 2008, 16:15

Bonjour à tous,
Je viens de me rendre d'un problème sur mon moteur de recherche interne.
J'ai une base de produit avec une colonne 'rubdetail2'. lorsque j'effectue une recherche avec une requête scrtant cette colonne, ça me donne des résultats seulement si je tape dans mon formulaire de recherche un des mots clés ! si je combine plusieurs mots clés, le résultats est nul !
J'ai rentré les mots clés dans cette colonne en les séparant avec une virgule.
et voici la ligne principale de ma requete
$motcle_annuaire =  (isset($_POST['motcle'])) ? $_POST['motcle'] : $_GET['motcle']; 

mysql_select_db($database_stock, $stock);
$query_annuaire = sprintf("SELECT * FROM produits WHERE produits.rubdetail2  LIKE '%%%s%%' ORDER BY produits.titre", $motcle_annuaire);
$query_limit_annuaire = sprintf("%s LIMIT %d, %d", $query_annuaire, $startRow_annuaire, $maxRows_annuaire);
$annuaire = mysql_query($query_limit_annuaire, $stock) or die(mysql_error());
$row_annuaire = mysql_fetch_assoc($annuaire);
merci si qlq peut m'aider

Mammouth du PHP | 881 Messages

26 juil. 2008, 18:31

Dans ton code, les usagers ne font que trier les éléments trouvés dans l'ordre des mots clefs choisis (ORDER BY motclef).
Est-ce bien cela que tu veux?

Il me semble comprendre que tu voudrais que les usagers puissent chercher dans la banque de données en fonction des mots clefs soumis (WHERE champ_de_recherche LIKE motcle)

Il faudrait préciser ce point avant d'aller plus loin.

Mettre la structure de ta table ne serait pas superflu, quelques éléments de son contenu aiderait aussi.
Soyez artisans de paix

Eléphant du PHP | 297 Messages

26 juil. 2008, 18:47

merci pour ta réponse Patriboom,
disons que mon code fonctionne pas trop mal, la forme du code doit etre bonne !? sauf si je tape plusieurs mots clés...
exemple : j'ai insérer dans la colonne a sruter pour un produit : pomme, rouge
si je tape pomme dans mon formulaire de recherche, ça marche
si je tape pomme rouge, il trouve rien... :(
désolé si j'ai pas ajouté la structure...je le ferai si le l'exemple ci dessus n'aide pas... :?

Mammouth du PHP | 881 Messages

26 juil. 2008, 20:20

Je comprends donc que tu veux faire une recherche par mot clef et non un tri par mot clef.

Si je reprends ton code, tu fais un tri par mot clef.
Voici qui devrait t'aider à faire une recherche comme je comprends que tu le veux:
$db = mysql_select_db($database_stock, $stock);
$motcle_annuaire =  (isset($_POST['motcle'])) ? $_POST['motcle'] : $_GET['motcle']; 

//On separe les mots clefs
$mots_cherches = explode(",", $motcle_annuaire);

//Construisons la requête: 
$requete  = "SELECT * FROM produits ";
$requete .= "WHERE produits.rubdetail2 LIKE '".$mots[0]."%' "
if (count($mots) > 1) {
    for ($x=1; $x<count($mots);$x++) {
        $requete .= " OR  produits.rubdetail2 LIKE '".$mots[$x]."%' "
    }
}
$query_annuaire = sprintf($requete." ORDER BY produits.titre", $motcle_annuaire);
$query_limit_annuaire = sprintf("%s LIMIT %d, %d", $query_annuaire, $startRow_annuaire, $maxRows_annuaire);
$annuaire = mysql_query($query_limit_annuaire, $stock) or die(mysql_error());
$row_annuaire = mysql_fetch_assoc($annuaire);

J'aurais pas dû tout faire, mais c'était plus facile.
Essaie ça et donne-nous des nouvelles.
Soyez artisans de paix