Поиск cлов не интересуясь кол-вом пробелов между ними

Tn

Guest
Поиск cлов не интересуясь кол-вом пробелов между ними

Например, пользователь ищет "mama mila ramu", программа должна найти:
"mama mila ramu"
"mama     mila     ramu" (не важно сколько пробелов между словами)
Это можно реализовать спомощью REGEXP: where gde_ishu REGEXP "mama +mila +ramu"
Можно так: where gde_ishu LIKE "%mama%" AND gde_ishu LIKE "%mila%" AND gde_ishu LIKE "%ramu%"

Интересуют следующие вопросы:
- что бы вы использовали с точки зрения быстродействия
- есть ли другие варианты, более оптимальные
- если использовать REGEXP, то какие символы, введенные пользователем, надо экранировать (по мимо этих: ', ", \, (, ), ^, $, ?, {, }, [, ], *, ., +, |) ? Возможно, у кого-то уже есть нужная процедура экранирования ?
- возможно, я что-то должен знать по этому вопросу дополнительно ? (с задачей использования REGEXP в MySQL cтолкнулся впервые)

Благодарю за внимание.
 

chira

Новичок
ещё можно посмотреть такой вариант:
Код:
SELECT * 
FROM table1
WHERE MATCH (gde_ishu) AGAINST ('mama mila ramu')
конечно если поле предварительно объявлено как FULLTEXT(gde_ishu)
 

Tn

Guest
Cпешу сообщить, что первый вариант с использованием REGEXP работает на 20% медленнее, чем второй вариант (LIKE).

Чем не тема для диссертации :p
 

IL78

Guest
Кроме того, что вариант LIKE быстрее, он еще найдет "mama mila odnu ramu", "mama mila druguyu ramu" и "ramu mama voobsche ne mila".
Т.е. поиск хоть и нестрогий, но более полный ;)
 

NetPerson

Guest
Скажите, а если искать по like, нужно ли вырезать знаки препинания, кавычки и т.д.?
 
Сверху