Probleme Moteur de recherche mysql

WRInaute impliqué
Bonjour à tout le monde
Je sais que le titre n'est pas très expressif.
Je vais vous expliquer mon problème.
J'ai un moteur de recherche sur mon site que j'ai fait moi-même avec des requêtes mysql
Mais il ne recherche que l'expression exacte et je voudrais proposer de faire une recherche comme dans l'annuaire de wri
Ou il serait possible de faire une recherche sur tous les mots ou de faire une recherche avec l'expression exacte.
en gros mon code est comme cela
Code:
$q = "select truc, machin from table_de_texte where truc LIKE '%$query%' OR truc LIKE '$query'";
$result = sql_query($q, $dbi);
$rows  = sql_num_rows($result, $dbi);
while(list($truc, $machin) = sql_fetch_row($result, $dbi)) {
echo le lien;
}
Je sais comment séparer ma requetes $query=split(" ",$query);
mais je ne sais pas comment afficher la requête s’il y a plusieurs mots

merci de votre aide
christophe
 
WRInaute occasionnel
Pour mon moteur j'utiliseun truc du genre :

$search=strtolower($search); // on passe les mots recherchés en minuscules
$mots = str_replace("+", " ", trim($search)); // on remplace les + par des espaces
$mots = str_replace("\"", " ", $mots); // on remplace les " par des espaces
$mots = str_replace(",", " ", $mots); // on remplace les , par des espaces
$mots = str_replace(":", " ", $mots); // on remplace les : par des espaces
$tab=explode(" " , $mots); // on place les differents mots dans un tableau
$nb=count($tab);
// on compte le nbr d'élément du tableau.

// CA c'est pour la recherche en phrase exacte
if ($operateur=='exact'){
$selection2="select truc, machin from TABLE where (truc like '%$search%' or machin like '%$search%') order by titre";
}
else
// CA c'est pour la recherche par mots (avec OR ou AND)
// remplacer $operateur par OR ou AND

{
$selection2="select truc, machine from TABLE where (truc like \"%$tab[0]%\" or machine like \"%$tab[0]%\") "; //on prépare la requête SQL.
for($i=1 ; $i<$nb; $i++)
{
$selection2.="$operateur (truc like \"%$tab[$i]%\" or machin like \"%$tab[$i]%\")"; // on boucle pour integrer tous les mots dans la requête
}
$selection2.=" order by titre ";
}

if ($result_compter2=mysql_db_query($login,$selection2))
 
WRInaute impliqué
je vais essayer maintenant

ps tu peux aussi faire
$query = rtrim ( $query );// pour supprimer tous les caractères blancs de fin de chaîne
 
WRInaute occasionnel
Sinon pour moi vous avez pas une soluce pour que sur mon site de recettes s'affichent les résultats de mon forum phpbb ( sur un autre hébergement) ? le soucis c'est que l'on ne peut pas lier la base sql du forum via un site externe !

ya bien google websearch mais l'intégration est pas top!

Des idées ?

pour t'aider sinon j'ai ça issue du portail artivelocity

// formatage des mots clef
$motsclef6 = explode(" ",$motsclef);
$motsclef5 = explode(" ",$motsclef);
$motsclef4 = explode(" ",$motsclef);
$motsclef3 = explode(" ",$motsclef);
$motsclef2 = explode(" ",$motsclef);
$motsclef = explode(" ",$motsclef);


/** RECHERCHE DOSSIERS ******************/


// construction de la requete sql dossier
$sql = "SELECT * FROM ".$extension."dossier";
$passage = 0;
while(list(,$motclef) = each($motsclef)) {
$motclef = AddSlashes($motclef);
if($passage) $sql .= ") AND ("; else $sql .= " WHERE (";
$sql .= "titreDossier LIKE '%$motclef%' OR chapoDossier LIKE '%$motclef%'";
$passage = 1;
}


$sql .= ") and pubDossier='1'";
MERCI D'AVANCE
 
WRInaute impliqué
Merci a toi Scores cela fonctionne très bien.
Je dois encore faire quelques petites modifications et cela sera sur mon site.

Pour ponko j'ai peut être une solution
Tu peux faire avec un form qui renvoi sur une page iframe qui tu auras fait toi-même pour pouvoir afficher les résultats du forum phpbb.
 
WRInaute discret
Juste pour info, pour développer un moteur de recherche avec PHP/MySQL, il est plus simple et efficace de passer par la fonction MATCH de MySQL et ses fonctionnalités FULL TEXT. En mode BINARY vous pourrez utiliser des opérateurs comme + et - pour inclure ou exclure des expressions, une liste complète des fonctionnalités se trouvent dans le manuel : (), *... C'est bien plus puissant que d'utiliser LIKE et en gros ça vous permet d'avoir un moteur de recherche "style Google" mais en moins puissant... évidemment :).
 
Discussions similaires
Haut