Разрабатываю поиск для базы данных.Нужно название строковой функции , которая бы удаляла не нужные символы в запросе , т.е. пользователь ввел искомое слово и случайно нажал на "." или ",".И как она записывается.
И так же нужно чтобы при запросе выводились слова с разными окончаниями , а не строгое соответствие, т.е. ввожу слово аппарат , вывод был аппарат, аппарата, аппараты и т.д.
>, а не строгое соответствие, т.е. ввожу слово аппарат , вывод
>был аппарат, аппарата, аппараты и т.д.
select * from anything where my_column like '%аппарат%'
>Разрабатываю поиск для базы данных.Нужно название строковой функции , которая бы удаляла
>не нужные символы в запросе , т.е. пользователь ввел искомое слово
>и случайно нажал на "." или ",".И как она записывается.
>И так же нужно чтобы при запросе выводились слова с разными окончаниями
>, а не строгое соответствие, т.е. ввожу слово аппарат , вывод
>был аппарат, аппарата, аппараты и т.д.Корректировать строку поиска лучше в скрипте, формирующем запрос:
PHP:
$search_string = ereg_replace("[\.,]", " ", $search_string);PERL:
$search_string =~ s/[\.,]/ /g;
(Извиняюсь, была опечатка, вместо =~ написал ~=)А потом уже:
$query = "select * from my_table where my_column=$search_string%";
почему-то пишет несоответствие типа: 'ereg_replace'
может я что-то не так делаю qText = ereg_replace("[\.,]", " ", qText)qText- это запрос получаемый от пользователя.
Для удаления пробелов я использовала qText = Trim(qText)работает замечательно ,так же вычитала информацию что этой же функцией можно и символы удалять, но как правильно записать не знаю .Пишу как разобрано в примере , постоянно ругается, то скобка не там, ставишь ее, потом пишет лишняя, не знаю как быть.Помогите разобраться.Trim Возвращает строку str со всеми remstr префиксами и/или прибавляет удаленный. Если ни один из спецификаторов BOTH | LEADING | TRAILING не указан, по умолчанию принимается BOTH. Если не определен параметр remstr, то он по умолчанию принимается равным пробелу.select TRIM(BOTH 'x' FROM 'xxxbarxxx'); -> 'bar'
>почему-то пишет несоответствие типа: 'ereg_replace'
>может я что-то не так делаю qText = ereg_replace("[\.,]", " ", qText)Вообще-то подразумевается, что qText - это переменная. Поэтому должно быть:
$qText = ereg_replace("[\.,]", " ", $qText);
>Разрабатываю поиск для базы данных.Нужно название строковой функции , которая бы удаляла
>не нужные символы в запросе , т.е. пользователь ввел искомое слово
>и случайно нажал на "." или ",".И как она записывается.
>И так же нужно чтобы при запросе выводились слова с разными окончаниями
>, а не строгое соответствие, т.е. ввожу слово аппарат , вывод
>был аппарат, аппарата, аппараты и т.д.
$mystr = "strings like '%".ereg_replace(",","%",
ereg_replace(" ","%' and string like '%",
ereg_replace(".","%",
ereg_replace("\!","%",
ereg_replace("ну и т.д.","%",
$mystr)))))."%'";$query = "Select * from searchbase where $mystr";
Вот и все, кстати strings - это столбец, в в котором идет поиск, а searchbase таблица
regexp + SQL: SELECT * FROM table WHERE match (strfield) against (searchkey)
>И так же нужно чтобы при запросе выводились слова с разными окончаниями
>, а не строгое соответствие, т.е. ввожу слово аппарат , вывод
>был аппарат, аппарата, аппараты и т.д.В общем случае ты попадаешь на морфологический анализ. Пример - строка поиска содержит "загородка", хочешь ли ты найти "городить"? А "выродки"?
В простейшем случае достаточно алгоритма Портера (поиск/замена по шаблону). Ещё есть такое решение, как N-Grams (триграмы и выше).
Про поиск и про строки - всё нужно преобразовывать в UNICODE. Запрос может придти в CP1251, CP866, KOI8, UTF8.
Ещё замечу, что еврейский парень по имени Сергей Брин собирается получить за программу, которая делает поиск, 2.7182818 зелёных миллиарда. С русской морфологией он пока не заморачивается.