2010-07-15 6 views
1

J'ai un champ de texte de recherche qui recherche une colonne particulière dans une table, mais les résultats ne sont pas comme prévu.construire une recherche pour une table particulière

Lorsque l'utilisateur essaie de chercher comme "bonjour comment faire", il ne trouvera pas de résultat car la requête est LIKE '% hello world comment%'. La ligne du tableau contient la chaîne "Bonjour tout le monde".

Comment faire une recherche correcte en utilisant php et mysql, et si je dois faire une recherche sur plusieurs tables/toutes les colonnes d'un tableau? Quelle est la meilleure façon de le faire?

Répondre

2

Un mauvais mauvais pour ce faire serait de diviser le texte de recherche de l'utilisateur sur les espaces. "Bonjour tout le monde" deviendrait "bonjour% monde% comment". Cependant, cela nécessiterait toujours le mot "comment" être là, après "bonjour monde", et ne garantirait pas que "bonjour" et "monde" sont proches les uns des autres. En outre, même si vous avez placé un index sur la colonne recherchée, une clause LIKE avec un caractère générique (%) ne peut pas utiliser cet index dans MySQL. Cela signifie que chaque recherche serait une analyse de table complète. Cela peut devenir assez lent.

Une solution pour vous pourrait être MySQL fulltext search. C'est assez flexible. Cependant, cela ne fonctionne qu'avec les tables MyISAM. Vous souhaitez probablement utiliser InnoDB pour vos données, car MyISAM ne prend pas en charge les clés ou transactions étrangères. Vous pouvez créer des tables dédiées et séparées qui utilisent MyISAM et l'indexation de texte intégral, uniquement à des fins de recherche.

Sphinx est une autre option qui s'offre à vous. C'est un système de recherche tiers qui peut être attaché à MySQL et PHP.

Toutes ces réponses sont axées sur la recherche d'une colonne à la fois. Si vous devez rechercher des lignes entières, cela devient un peu plus intéressant. Vous voudrez peut-être envisager un système de recherche basé sur "document", comme ElasticSearch.

Questions connexes