d'abord vous voulez vraiment une recherche en texte intégral pour cette.
Si pour une raison quelconque essayer de le faire avec pur SQL puis
- première chose que vous devez faire est de vous diviser rechercher chaîne en mots
- et filtrer les mots (pronoms, conjonctions, prépositions, etc) en utilisant une sorte de liste d'arrêt ou/et filtrer les mots moins de 2 ou 3 caractères.
Quelque chose comme cela pourrait le faire pour commencer:
$search_string = 'text in English Language';
$stop_list = array('in', 'on', 'I', 'me', 'he', 'she');
$search_words = explode(' ', $search_string);
$keywords = array_diff($search_words, $stop_list);
Vous obtiendrez dans $keywords
array(3) {
[0]=>
string(4) "text"
[2]=>
string(7) "English"
[3]=>
string(8) "Language"
}
Maintenant, ayant un réseau de mots-clés que vous pouvez construire une requête comme celui-ci
SELECT id, page_title, url, search_description, text1, text2, text3,
(text LIKE '%text%') +
(text LIKE '%English%') +
(text LIKE '%language%') rank
FROM
(
SELECT id, page_title, url, search_description, text1, text2, text3,
CONCAT_WS(' ', text1, text2, text3) text
FROM pages p
) q
WHERE text LIKE '%text%'
OR text LIKE '%English%'
OR text LIKE '%language%'
HAVING rank > 1 -- play with cut-off rank value to get most relevant results
ORDER BY rank DESC
Exemple de sortie:
+------+------------+------+--------------------+-------+------------+-----------------+---------------------------------+------+
| id | page_title | url | search_description | text1 | text2 | text3 | text | rank |
+------+------------+------+--------------------+-------+------------+-----------------+---------------------------------+------+
| 3 | page3 | url3 | NULL | text | English | language | text English language | 3 |
| 1 | page1 | url1 | NULL | text | in English | text in English | text in English text in English | 2 |
+------+------------+------+--------------------+-------+------------+-----------------+---------------------------------+------+
Note: cette requête sera lente et voie de manière moins fonctionnelle que toute solution FTS.
est ici SQLFiddle démo
On dirait que vous voulez vraiment la recherche en texte intégral, probablement avec l'option booléenne. Consultez la documentation pour plus d'informations (http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html). –
Veuillez modifier votre question pour clarifier ce qui est recherché et ce qui est recherché. "Rechercher qui recherche un mot dans la recherche" est affreusement opaque. Cela ne fonctionne pas si vous "entrez trop de texte" - entrez le texte où? Dans vos champs de base de données ou votre chaîne '$ searchquery'? – Air
Question éditée, j'espère que cela aidera à éclaircir ce que je demande. Richard –