Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Опять поиск
 
 автор: spiner   (28.09.2005 в 11:38)   письмо автору
 
 

Привет.. Вот такой у меня вопрос. Поступила мне поисковая фраза из формы.
Например : деревянное окно
Как я делал раньше (делал тупо):
1) Я разделял фразу на слова
2) Отнимал у каждого слова по последней букве
3) Искал сначала всю фразу, а потом по каждому из слов
4) А в ответе знаете, что у меня было? :-)))) Ужас просто
Например если есть статья, содержащая деревянное окно , в результате поиска, у меня было 3 ответа)))))( по "деревянное окно", по "деревянно" и по "окн") Просто тогда мне не хотелось заморачиваться. А сейчас уже надо задуматься..Использовал LIKE.
Вопрос в студию:
Как мне избавиться от таких результатов? Использовать релевантность и FULLTEXT?
Типа

SELECT * FROM table WHERE MATCH(column) AGAINST('text')

???? На самом деле идеи есть.. Просто хочу у вас поинтересоваться...

   
 
 автор: SMAlik   (28.09.2005 в 12:02)   письмо автору
 
   для: spiner   (28.09.2005 в 11:38)
 

У меня вообще поиск сделан очень просто. Вот код:


                  $srch=explode(" ", $srch);

                  @ $query="SELECT * FROM ИМЯ ВАШЕЙ ТАБЛИЦЫ WHERE MATCH(ПОЛЕ ПО КОТОРОМУ ИСКАТЬ) AGAINST ('$srch[0]*' IN BOOLEAN MODE)";

                  /* for ($i=0; $i<count($srch); $i++)
                   {
                        $query.="+".$srch[$i]." ";
                   }
                   $query.="' IN BOOLEAN MODE)";*/

                   for ($i=0; $i<count($srch); $i++)
                   {
                        $query.=" AND MATCH(name) AGAINST ('$srch[$i]*' IN BOOLEAN MODE)";
                   }
                   #$query.="' IN BOOLEAN MODE)";

                   $result=mysql_query($query);

                   @ $num=mysql_num_rows($result);


Меня пока устраивал. Может и тебе подойдёт.

   
 
 автор: P@Sol   (28.09.2005 в 12:05)   письмо автору
 
   для: SMAlik   (28.09.2005 в 12:02)
 

извините, а прокомментировать можете?

   
 
 автор: SMAlik   (28.09.2005 в 12:15)   письмо автору
 
   для: P@Sol   (28.09.2005 в 12:05)
 


        elseif ($search=="name") // Проверяем, критерий по чему ищем, у меня на сайте по коду и по имени. В данном случае по имени
            {

                  $srch=explode(" ", $srch); //полученную подстроку из текстового поля делим на слова и запихиваем в массив

                  @ $query="SELECT * FROM 'ВАША ТАБЛИЦА' WHERE MATCH(ПОЛЕ ТАБЛИЦЫ) AGAINST ('$srch[0]*' IN BOOLEAN MODE)"; //создаём запрос в который прописываем где ищем и заносим первое слово из массива (см выше)

                    for ($i=0; $i<count($srch); $i++) //если несколько слов, то запускаем цикл на создание полной строки запроса
                   {
                        $query.=" AND MATCH(ПОЛЕ ТАБЛИЦЫ) AGAINST ('$srch[$i]*' IN BOOLEAN MODE)"; // добавляем последующие слова к первому
                   }

                   $result=mysql_query($query); // выполняем созданный нами запрос

                   @ $num=mysql_num_rows($result);


            }


Вот и всё. Просто.

   
 
 автор: spiner   (28.09.2005 в 12:26)   письмо автору
 
   для: SMAlik   (28.09.2005 в 12:15)
 

Гы. Спасибо! Буду пробовать!

   
 
 автор: SMAlik   (28.09.2005 в 12:43)   письмо автору
 
   для: spiner   (28.09.2005 в 12:26)
 

Да пожалуйста!

   
 
 автор: spiner   (28.09.2005 в 14:40)   письмо автору
 
   для: SMAlik   (28.09.2005 в 12:15)
 

Кстати!! Если у тебя в массиве слов больше одног, то первое слово у тебя будет искаться ДВА раза:(наверное)

@ $query="SELECT * FROM 'ВАША ТАБЛИЦА' WHERE MATCH(ПОЛЕ ТАБЛИЦЫ) AGAINST ('$srch[0]*' IN BOOLEAN MODE)"; // ПЕРВЫЙ РАЗ

                    for ($i=0; $i<count($srch); $i++) //если несколько слов, то запускаем цикл на создание полной строки запроса
                   {
                        $query.=" AND MATCH(ПОЛЕ ТАБЛИЦЫ) AGAINST ('$srch[$i]*' IN BOOLEAN MODE)"; // ВТОРОЙ РАЗ
                   } 

   
 
 автор: SMAlik   (29.09.2005 в 08:29)   письмо автору
 
   для: spiner   (28.09.2005 в 14:40)
 

Ничего подобного не наблюдал. Вроде всё правильно ищет

   
 
 автор: P@Sol   (29.09.2005 в 14:51)   письмо автору
 
   для: SMAlik   (29.09.2005 в 08:29)
 

нашел ссылку по теме...очень хорошо там все объяснено

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования