2009-12-16 8 views
1

J'ai une base de données de phrases que les utilisateurs vont chercher à partir de leur propre entrée. Je veux qu'ils trouvent la phrase indépendamment de la ponctuation qu'ils utilisent. Par exemple, si la phrase, "Hey, comment allez-vous?" est dans la rangée, je veux que toutes les recherches suivantes pour le retourner:Recherche insensible à la ponctuation dans mySQL

  • "Hey! Comment allez-vous ?!"
  • "Hey, comment allez-vous?"
  • "Hey :) Comment ça va?"

En ce moment, j'ai les colonnes 'phrase' et 'phrase_search'. La recherche d'expression est une version simplifiée de la phrase afin que notre exemple soit «hey-how-are-you».

Y a-t-il moyen d'y parvenir sans avoir à mémoriser la phrase deux fois?

Merci!

-Nicky

Répondre

3

Ce que vous avez fait est probablement le moyen le plus efficace du temps de le faire. Oui, il faut doubler l'espace, mais est-ce un problème?

Si elle est un problème, une solution possible serait de convertir votre chaîne de recherche à utiliser des caractères génériques (par exemple. %Hey%how%are%you%), puis filtrer les résultats SQL dans votre code en appliquant la même fonction de décapage à l'entrée de la base de données et la chaîne de recherche et en les comparant. Le raisonnement derrière ceci est qu'il devrait y avoir relativement peu de correspondances avec les caractères de non-ponctuation entre les mots, ainsi vous obtenez toujours que MySQL fasse le "heavy lifting" tandis que votre code PHP/Perl/Python/any peut faire un vérifier plus finement sur un nombre relativement petit de rangées.

(Cela suppose que vous avez un code appelant cela, plutôt que d'un utilisateur en tapant la requête SQL à partir de la ligne de commande, bien sûr.)

+0

Excellente idée! Quand vous dites temps-efficace, voulez-vous dire temps de recherche ou temps de codage? Je serais curieux de savoir quelle méthode vous semble la plus rapide en termes de performance DB. –

+0

Bon point - je voulais dire temps de recherche. Le temps de codage dépendrait de la façon dont les données sont mises à jour, je suppose, mais peut-être que cette solution de «post-filtrage» est meilleure à cet égard. – EMP

Questions connexes