| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MySQL > поиск без учета символов |
| Автор: z-END 14.9.2011, 10:34 |
| можно ли организовать поиск, без учета символов? т.е. в базе есть поле номер 8-123-456-78-90, пользователь вводит 81234567890 или 8 123 456 78 90 и находит соответствующую запись.? |
| Автор: rodnover 14.9.2011, 11:02 | ||
| Только если использовать UDF с возможностью замены по Regexp'ам. Например, http://www.mysqludf.org/lib_mysqludf_preg/ Удалять в обоих случаях лишние символы и их сравнивать. Либо хранить в базе номера уже без лишних символов, а в строке введенной пользователем удалять лишние символы. Или вот так, но это очень громоздко:
|
| Автор: rodnover 14.9.2011, 12:10 |
| Тогда вырезанием подстрок или удалением лишних символов. :( |
| Автор: z-END 14.9.2011, 12:18 |
| только что мысль в голову пришла: задача найти ABC-1222.01/165 пользователь вводит: ABC122201165 выполняем запрос ... LIKE '%A%B%C%1%2%2%2%0%1%1%6%5%' (т.е. каждый символ экранируем %) тем самым мы включаем все символы... вот тока не могу понять, велика ли вероятность поймать ошибочное поле? |
| Автор: AndreyIQ 14.9.2011, 12:25 | ||
Поймаешь вместо ABC-1222.01/165: ABC-11222.01/165 и AABC-1222.01/165 и ABC-1222.101/165 и т.д. |
| Автор: rodnover 14.9.2011, 12:36 |
Символы всегда в одинаковых местах же стоят? Сделай тогда так: пользователь вводит ABC122201165, а в запрос отдавай 'ABC' + '-' + '1222' + '.' + .... |
| Автор: z-END 14.9.2011, 13:28 |
нет, символы это я из головы взял, фактически у каждого производителя своя номенклатура и способ ее задания. по этому и ищу какой-то универсальный способ.. |
| Автор: AndreyIQ 14.9.2011, 13:38 | ||||
ИМХО самый правильный вариант, предложенный Вам, rodnover'ом
|
| Автор: z-END 14.9.2011, 14:26 | ||
с данными приходящими от пользователя все понятно - вырезать регуляркой и все. а как быть с миллионом строк в базе данных? поштучно ВСЕ перебирать чтоли? |
| Автор: AndreyIQ 14.9.2011, 14:55 | ||||||
Ранее предложенные варианты с UDF или
или написать хранимую процедуру |
| Автор: rodnover 15.9.2011, 06:27 | ||
Можно не update, а
Либо создать еще одно поле, в которое в триггере записывать строку без лишних символов. В итоге получится 2 варианта: один для поиска, другой для отображения. |