2010-04-06 4 views
0

afin de rendre les choses plus faciles pour les utilisateurs je veux ajouter plusieurs mots-clés de recherche sur mon site. de sorte que dans l'entrée, l'utilisateur ferait quelque chose comme: "mot-clé1 mot-clé 2" (similaire à google par exemple aurais-je besoin d'écrire un code qui analyserait cette chaîne et faire des requêtes basées sur cela ou est-ce quelque chose construit MySQL qui pourrait le fairerequête multi-mots dans mysql

Répondre

2

Un moyen facile à mettre en œuvre ce serait:

SELECT * FROM table 
WHERE column LIKE '%keyword1%' 
OR column LIKE '%keyword2%'; 

Mais vous voudrez peut-être regarder full text search functions

Edit:. Oops, a oublié de traiter diviser l'entrée chaîne

En fonction de la langue que vous utilisez (PHP?):

Pour obtenir les mots-clés séparés, en supposant qu'ils sont séparés par des espaces:

$keywords = explode(" ", $searchquery); 

Ensuite, vous pouvez utiliser une boucle pour créer la requête SQL:

$query = "SELECT * FROM table WHERE "; 
for($i = 0; $i < count($keywords); $i++) 
{ 
    $query .= "column LIKE '%{$keywords[$i]}%'"; 
    if($i < count($keywords) - 1) $query .= " OR "; 
} 
+0

La partie mysql que je connais (ou du moins celle-là) mais était curieux si c'est comme ça que les moteurs de recherche le font? en divisant la chaîne de requête en plusieurs et en recherchant en utilisant la commande "or"? ou peut-être y a-t-il un moyen plus intelligent que je ne connais pas? merci – salmane

+0

Désolé, j'ai ajouté quelques informations pour gérer la séparation de la chaîne d'entrée. J'ai supposé qu'il devait être divisé par espaces, mais je n'étais pas sûr du langage de programmation que vous utilisez. – JYelton

+0

Les moteurs de recherche utilisent en effet une recherche en texte intégral. (Bien qu'il soit généralement un peu plus avancé que celui des bases de données SQL grand public). L'approche LIKE offre une évolutivité terrible, c'est pourquoi elle n'est pas utilisée. (En outre, les systèmes de recherche de texte intégral permettent généralement une certaine inexactitude dans l'orthographe, ce qui n'est pas le cas.) –