SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 19.11.2010 14:17:20

lyapun
Участник
Зарегистрирован: 19.11.2010
Сообщений: 3

[q] Выборка без учета разделяющих символов (типа '/', '.', '-', ' ', и т.п.)

Задача:
Есть поле в таблице значения в которой записаны в каком-то отформатированном виде, например:
"123-GKU 890"
"78.23.356"
Нужно чтобы в не зависимости от того как будут введен необходимый код, строки находились, например:
"123 GKU-890" и "1.2.3 G-K.U/890"  и т.п. должны выводить на искомый "123-GKU 890".

Я придумал два способа решения проблемы:
1. Добавить в таблицу столбик в котором код будет записан без всех пробелов, тире, точек и т.д.. И в запросе также убирать все эти символы - соответственно поля будут находиться. Но как-то это не изящно, и страшно представить сколько времени займет обновление таблицы в которой десяток миллионов записей.
2. Использовать функцию REPLACE. Но это очень увеличивает время выполнения запроса, так что точно не катит.

Господа, может существует красивый способ решения данной проблемы?
Спасибо.

Неактивен

 

#2 19.11.2010 14:28:51

vaspet
Завсегдатай
Зарегистрирован: 11.03.2009
Сообщений: 83

Re: [q] Выборка без учета разделяющих символов (типа '/', '.', '-', ' ', и т.п.)

Голосую за первый способ. Потери при добавлении (обновлении) записей незначител'ны, зато производител'ност' по сравнению со 2. вариантом при поиске колосал'ная.
другие методы в голову не приходят

Неактивен

 

#3 19.11.2010 22:11:12

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: [q] Выборка без учета разделяющих символов (типа '/', '.', '-', ' ', и т.п.)

+1 за первый способ. Тут хочется, чтобы можно было делать индекс над функцией
от поля, но, увы, так нельзя.

Неактивен

 

#4 20.11.2010 10:49:04

lyapun
Участник
Зарегистрирован: 19.11.2010
Сообщений: 3

Re: [q] Выборка без учета разделяющих символов (типа '/', '.', '-', ' ', и т.п.)

Как посоветуете добавить этот столбец - написав php скрипт или прямо в БД цикл организовать?

Неактивен

 

#5 20.11.2010 14:32:58

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: [q] Выборка без учета разделяющих символов (типа '/', '.', '-', ' ', и т.п.)

Добавить столбец, добавить триггеры для добавления и обновления,
обновить один раз руками.

Неактивен

 

#6 20.11.2010 20:11:23

lyapun
Участник
Зарегистрирован: 19.11.2010
Сообщений: 3

Re: [q] Выборка без учета разделяющих символов (типа '/', '.', '-', ' ', и т.п.)

Ок, спасибо.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson