Поиск по базе, с пропуском некоторых символов

Gluk

Новичок
Поиск по базе, с пропуском некоторых символов

Если пользователь вводит номер детали н.р.: AFCADF
то нужно вывести все записи, кот. удовлетворяют условию! Но проблема в том, что записи хранятся в виде н.р. AFC-A-DF! Т.е. выбирать нужно, пропуская символы!
Какой запрос написать? или как это реализовать? ;)

Заранее спасибо!
 

chira

Новичок
номер_детали LIKE 'AFC%A%DF'
если всегда один символ-разделитель то
номер_детали LIKE 'AFC_A_DF'
есть еще RLIKE
 

Nexus

Guest
Если детали имеют наименование xxx-x-xx, а пользователь вводит xxxxxx, то перед отсылкой запроса ты просто обрабатываешь переданную пользователем строку в нужную (напр. рег. выражением).

Если такового правила нет, то
LIKE "X%X%X%X%X%" - идея, думаю, понятна.

Либо покопай регулярные выражения в MySQL
 

Gluk

Новичок
а я сделал так - WHERE REPLACE(имя столбца, '-', '') = условие
 

Апельсин

Оранжевое создание
Gluk, в твоем решении об оптимизации можно забыть, т.к. индексы использоваться не будут ни при каких условиях.
 

Alien

Новичок
Как понимаю проблема в том что неизвестно где юзверь и какие разделители будет использовать.
Если деталей в бд много, а ищут часто - возможно имеет смысл держать второе поле - только буквы (и цифры) - без _ и - , по нему и искать.
Соответственно пользовательский запрос обрабатывать перед поиском - вырезать левые символы (-).

Кстати, и индексы можно будет заюзать, так как ищем по строке, а не по like '%emoe%'
 

Апельсин

Оранжевое создание
> можно поподробнее насчет индексов?

Если у тебя в левой части стоит выражение (в твоем случае REPLACE(имя столбца, '-', '') ), то индексы не используются.
 
Сверху