Поиск Mysql для строки - PullRequest
       16

Поиск Mysql для строки

2 голосов
/ 29 января 2009

У людей разные представления о том, как искать один и тот же термин.

Например, Tri-Valley, Trivalley, Tri Valley (и, возможно, даже неправильное написание)

В настоящее время этот поиск выполняется следующим образом

SELECT * FROM `table` WHERE `SchoolDistrict` LIKE '%tri valley%';  

Есть ли простой способ сказать «пробел или нет пробела», не написав три одинаковых утверждения?

Кажется, что это легко сделать:

SELECT * FROM `table` WHERE `SchoolDistrict` LIKE '%tri%valley%';

Но это работает только в том случае, если начальный ввод - «tri-valley» или «tri-долина». Если начальный ввод - «trivalley», я понятия не имею, где разместить% (теоретически, то есть фактически мы рассматриваем только около дюжины различных школьных округов, но я ищу решение более крупной проблемы)

Ответы [ 4 ]

3 голосов
/ 29 января 2009

Вы можете использовать SOUNDEX или SOUNDS LIKE , если у вас много неправильных написаний. Если у вас много строк (или даже нет), возможно, было бы целесообразно сохранить выходные данные SOUNDEX в дополнительном столбце.

Я бы также рекомендовал - в интересах точности - ввести отдельную таблицу с официальным списком школьных округов и выполнить запрос, чтобы найти те, которых нет в этом списке.

1 голос
/ 29 января 2009

Альтернатива здесь - переписать проблему из поиска, чтобы выбрать, если это возможно. Вместо того, чтобы позволить пользователям вводить текст произвольной формы для выбора школьного округа, если у вас есть набор школьных округов, создайте раскрывающийся список (или набор каскадных раскрывающихся списков, если список большой, например, по округам, а затем по школьным округам) и разрешите пользователь, чтобы выбрать соответствующий. Используйте это как для «поиска», так и для ввода данных, чтобы исключить неканонические записи. Очевидно, это работает только тогда, когда вы можете перечислить все записи.

В качестве альтернативы вы можете разрешить пользователю выбирать поиск, начинающийся с или содержащий поиск типа, и просто генерировать соответствующий SQL ('tri%' или '% tri%') на основе выбранного типа поиска. Если пользователь понимает, что тип поиска начинается с или содержит, он, скорее всего, будет корректировать свою строку поиска до тех пор, пока она не выдаст необходимые результаты.

1 голос
/ 29 января 2009

В MySQL есть функция Sounds like.

текст ссылки

0 голосов
/ 29 января 2009

Второе заявление, которое вы опубликовали, должно сработать:

SELECT * FROM 'table' WHERE 'SchoolDistrict' LIKE '%tri%valley%';

Что нужно сделать перед тем, как передать поисковый запрос в оператор выбора, - заменить все символы и пробелы знаком%. Например,

SearchTerm = SearchTerm.Replace(" ","%");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...