Mysql выберите слово (множественное число, единственное число) - PullRequest
0 голосов
/ 13 ноября 2011

В моей базе данных Mysql у меня есть список таких терминов, как (с заглавными буквами и в большинстве случаев множественным числом)

Hairdressers
Restaurants
Beauty Salons 
Fournitures For Restaurants

На моем сайте есть панель поиска, где пользователь может искать это слово (мой сайт является своего рода поиском POI). Но у меня проблемы с моим запросом.

SELECT * FROM TABLE WHERE word = 'userword'

1: Если пользователь входит в рестораны, он не работает, потому что он вводит «r» в нижнем регистре. 2: если пользователь входит в ресторан либо потому, что он не поставил его во множественном числе

Я пробовал с SELECT * FROM TABLE WHERE word like 'userword'

Это исправило проблему для заглавных букв, но я понятия не имею, как заставить запрос работать, когда пользователь вводит слово в единственном числе. это единственное решение добавить это слово в БД?

Спасибо

Ответы [ 3 ]

3 голосов
/ 13 ноября 2011

Может быть, лучше с регулярным выражением, которое также соответствует проверке множественного имени только на дополнительные s в конце слова:

SELECT * FROM table where word REGEXP '^userword[s]?'

Обратите внимание, что совпадения с регулярными выражениями в MySQL по умолчанию не чувствительны к регистру.

1 голос
/ 13 ноября 2011

Лучшее решение - использовать для этого подходящую поисковую систему, которая будет использовать соответствующий анализатор и стеммер для предоставления качественных результатов пользователям. Такой поисковой системой является lucene , и если вы не хотите иметь дело с деталями реализации, вы можете использовать Solr , который является поисковым сервером.

1 голос
/ 13 ноября 2011

Когда вы используете LIKE, вы можете использовать% для обозначения подстановочных знаков

Итак:

SELECT * FROM table where word like '%userword%'

Соответствует:

userword, userwords, superuserwords, ...

Но если вы используете LIKE таким образом (обратите внимание на дополнительные s ):

SELECT * FROM table where word like '%userwords%'

Это не соответствует:

userword, superuserword, ...
...