Forum Webscript.Ru

Общие => Базы данных => Тема начата: tarya от 23 Октября 2002, 13:31:56

Название: Поиск в базе по нескольким словам
Отправлено: tarya от 23 Октября 2002, 13:31:56
Если чесно то я уже замучился, просмотрел кучу всяких тем и того и сего и книжень тут купил Поля Дюбуа и все не как не напишу поиск по нескольким словам.
у меня есть запрос:
SELECT MID(data , LOCATE(\'$find\', data) -10, 160)  AS data, link FROM u_find WHERE data LIKE \'%$find%\'
который отыскивает в индексе (я индексю весь сайт в базу) %$find% и как бы все классно работает когда в запросе 1 слово - например "китай" мне потом выводятся все куски текста где это слово встречается, а вот если человек написал "кукурузная мука в китае" и в индексе такого точно свпадения нет - значит результат ноль. как розбить слова на несколько я все могу - но кк потом составить запрос ? я думал через LIKE \'%$find1%\' OR LIKE \'%$find2%\' OR LIKE \'%$find3%\' нно мне кажется это лишь припарки - чтото оно не работает. - помогите пожалуста ребята, плиззззззззззззззззззззз!

спасибо
Название: Поиск в базе по нескольким словам
Отправлено: NeoNox от 23 Октября 2002, 13:48:20
Цитировать
книжень тут купил Поля Дюбуа

Применение MySQL и Perl...?
Страница 447. :)
Название: Поиск в базе по нескольким словам
Отправлено: tarya от 23 Октября 2002, 13:53:54
не у меня первая книга наверное просто Мускл и все, так что ты незнаешь как помочь?
Название: Поиск в базе по нескольким словам
Отправлено: fidget от 23 Октября 2002, 15:02:04
> нно мне кажется это лишь припарки - чтото оно не работает.

что именно не работает?

кроме того в MySQL есть еще и fulltext search...
Название: Поиск в базе по нескольким словам
Отправлено: tarya от 23 Октября 2002, 15:12:41
незнаю, но не работает кажись или руки корявіе, а что такое fulltext search я вообще еще не прохавал, хотя читаю часто
Название: Поиск в базе по нескольким словам
Отправлено: Tronyx от 23 Октября 2002, 15:13:09
Цитировать
я думал через LIKE \'%$find1%\' OR LIKE \'%$find2%\' OR LIKE \'%$find3%\'

Вообще-то это должно работать...;)

А ещё лучше посмотри в мануал и найди там функции MATCH() и AGAINST(), ну а если лень в ман лезть, то иди на http://detail.phpclub.net, там есть статья - "поиск с релевантностью".

PS на форуме есть такая классная штука как поиск, пользуйся им.
Название: Поиск в базе по нескольким словам
Отправлено: tarya от 23 Октября 2002, 15:22:43
Цитировать
то иди на http://detail.phpclub.net,

я уже переспал со всеми статьями на том сайте по поиску, все 4 или 5 их там прочел по 40 раз, но не могу врубиться, там для сильно умных написано, так как не расписано какие поля за что отвечают, ну короче говоря не дохожу я умом....
ты говоришь должно работать? так может мне попробовать? а то я так толкком и непробовал, думад незароботает то что я написал
Название: Поиск в базе по нескольким словам
Отправлено: NeoNox от 23 Октября 2002, 15:26:30
Я понял, у тебя с алгоритмом запарка...
Значит так:
полученные ключевые слова нужно разделить, построить для каждого из них LIKE. Регэкспом или иначе, не важно...
Название: Поиск в базе по нескольким словам
Отправлено: tarya от 23 Октября 2002, 17:06:01
Цитировать
полученные ключевые слова нужно разделить, построить для каждого из них LIKE.



я все сделал и получился запрос:
$query = "SELECT MID(data , LOCATE(\'$find\', data) -10, 160)  AS data, link FROM u_find WHERE data LIKE \'%$word[0]%\' OR LIKE  \'%$word[1]%\'";

но ничего неработает :( как біть?
Название: Поиск в базе по нескольким словам
Отправлено: fidget от 23 Октября 2002, 17:17:39
tarya
что именно не работает?
оно может выдавать ошибку, может не находит строк

попробуй проверить запрос не скриптом, а через mysql клиента.
Название: Поиск в базе по нескольким словам
Отправлено: NeoNox от 23 Октября 2002, 17:21:51
А масив то существует?
У меня этот запрос работает:
$sql = "SELECT
               $fld_Id
             FROM
               $tbl
             WHERE
               $fld LIKE \'%$SearchString[0]%\'
             OR
               $fld LIKE \'%$SearchString[1]%\'";
Название: Поиск в базе по нескольким словам
Отправлено: tarya от 23 Октября 2002, 17:28:42
You have an error in your SQL syntax near \'LIKE \'%отели%\'\' at line 1


масив есть, я разделяю все слова и получается масив

примерно понял в чем запарка, наверное в MID(data , LOCATE(\'$find\', data) -10, 160) попробую вырезать кусок текста спомошью ПХП
Название: Поиск в базе по нескольким словам
Отправлено: fidget от 23 Октября 2002, 17:34:02
Цитировать
data LIKE \'%$word[0]%\' OR LIKE \'%$word[1]%\'";


data LIKE \'%$word[0]%\' OR data LIKE \'%$word[1]%\'

ПС: там кто-то обещался купить себе книжку, как насчет того, что бы в ней и про синтаксис выражений почитать?
Название: Поиск в базе по нескольким словам
Отправлено: NeoNox от 23 Октября 2002, 17:45:18
fidget
[OFF]Так купил же :)[/OFF]
Название: Поиск в базе по нескольким словам
Отправлено: fidget от 23 Октября 2002, 17:59:40
[OFF]так я его попросила там про синтаксис почитать :-Р[/OFF]
Название: Поиск в базе по нескольким словам
Отправлено: tarya от 23 Октября 2002, 19:01:34
Цитировать
data LIKE \'%$word[0]%\' OR data LIKE \'%$word[1]%\'

с этим я уже разобрался, но тогда у меня работает запрос но ничего не выводит из найденого так как MID(data , LOCATE(\'$find\', data) -10, 160)  определяет начальное значение по первому слову, я буду решать эту проблему через ПХП
Название: Поиск в базе по нескольким словам
Отправлено: Maniac от 23 Октября 2002, 20:30:40
Кстати, "$word[0]" и "$word[1]" означают Array[0] и Array[1]. У тебя в тексте такие слова встречаются? :)