За последние 24 часа нас посетили 52411 программистов и 1798 роботов. Сейчас ищут 756 программистов ...

Поиск по сайту

Тема в разделе "PHP для новичков", создана пользователем GvOzD, 18 мар 2008.

  1. GvOzD

    GvOzD Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    103
    Симпатии:
    0
    Подскажите как реализовать поиск по таблице MySQL , что бы он грамотно искал как слова , так и фразы??
     
  2. shreck

    shreck Активный пользователь

    С нами с:
    7 авг 2007
    Сообщения:
    479
    Симпатии:
    0
    Адрес:
    Россия, Саратов
    PHP:
    1. $sql = 'select * from `table_name` where `content` like %'.$searchString.'%';
     
  3. GvOzD

    GvOzD Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    103
    Симпатии:
    0
    У меня и было написано с LIK'ами , таким образом:
    1)Гетом приходит переменная , если она больше 3 символов заменяю все разделительные символы на пробелы и разделяю на массив по тем же пробелам.
    2) Циклом пробегаю по массиву и если слово больше 5 символов с помощью phpMorphy получаю корень слова.
    3) С помощью функции implode('%',$array) собираю всё обратно в строку
    4)Подставляю в запрос

    select * from `table_name` where `content` like '$seach' or `name` like '$seach' or `about` like '$seach'

    Проблема в том что порой скрипт находит строки, в которых вообще нет вхождений подстроки
     
  4. shreck

    shreck Активный пользователь

    С нами с:
    7 авг 2007
    Сообщения:
    479
    Симпатии:
    0
    Адрес:
    Россия, Саратов
    Мне кажеться это излишне.
    Составляй запрос динамически т.е. например строка поиска у тебя содержит 'мама, папа, я и бубен'. Делай из строки массив (explode), разделитель - запятая, потом в зависимости от количества элементов в массиве подставляй в запрос столько OR LIKE сколько нужно.
    Но это геморно. Посмотри в сторону библиотеки Котерова DbSimple. Там есть прекрасный механизм, который как раз тебе и нужен)
     
  5. GvOzD

    GvOzD Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    103
    Симпатии:
    0
    Лайки нужны все , я же не знаю в каком поле встретится вхождение.В библиотеке DbSimple ничего подходящего не нашёл , да и смысла из за одного некорректного запроса DbSimple использовать , всё остальное у меня замечательно работает.
    Мне кажеться тут какие-то траблы с кодировкой. Я сейчас через phpMyAdmin руками прям запрос вбил

    select * from `table_name` where `about` like '%фыва%'

    И он мне 4 строки нашёл , хотя ни в одной такого нет(
     
  6. shreck

    shreck Активный пользователь

    С нами с:
    7 авг 2007
    Сообщения:
    479
    Симпатии:
    0
    Адрес:
    Россия, Саратов
    Листинг 33. Почитай, интересно.

    По поводу кодировок - юзай iconv.