Помогите с поисковиком(php)

Discussion in 'PHP' started by !Knyaz2010!, 14 Nov 2010.

  1. !Knyaz2010!

    !Knyaz2010! Member

    Joined:
    24 Jun 2010
    Messages:
    57
    Likes Received:
    5
    Reputations:
    5
    Доброе время суток. Перейду сразу к делу. Я студент и одно из дополнительных мне заданиё было сделать поисковую систему на php которая будет искать у БД MySQL несколько слов одновременно. Тоесть, будет выдавать результаты где встречается ы первое и второе и третие слово как роздельно так и одновременно, при этом все они будут выводится на екран в порядке спадания - сначала где встречаются 3 слова, потом 2, потом - 1.

    Есть вариант как это сделать но с реализацыем очень туго. Я думал чтобы зделать поиск по полях таблицы с параметром LIKE %...% где сначала будет искать первое слово и id соответствуещей записи записывать у временную таблицу, потом второе - записывать у 2-ю таблицу, потом 3 - записывать у 3-ю таблицу. Потом ищем нет ли одинаковых id у всех таблицах и записываем количество совпадений в ещё одну таблицу. Удалаем те три таблицы. В конце виводим все с последней таблицы сортируем за количеством совпадений.

    Идея то есть, а как правильно сделать не знаю.
    1) как сделать чтобы поисковик понимал где кончаеться первое слово
    2) как правильно написать такой код

    Помогите пожалуйста. Может у кого есть другие мысли по этому поводу, которые будут легче. Заранье спасибо большое!
     
  2. .::BARS::.

    .::BARS::. Elder - Старейшина

    Joined:
    13 Oct 2007
    Messages:
    379
    Likes Received:
    45
    Reputations:
    10
    ну к примеру есть предложение
    я иду гулять

    делим слова

    $text='я иду гулять';
    explode(' ',$text);

    получаем массив

    $text[0] //я
    $text[1] //иду
    $text[2] //гулять
     
  3. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    !Knyaz2010! Сделать выборку можно 1 запросом
    Code:
    SELECT * FROM `table` WHERE 
    `col` LIKE `%usl1%` AND `col` LIKE `%usl2%` AND `col` LIKE `%usl3%`
    UNION SELECT * FROM `table` WHERE 
    (`col` NOT LIKE `%usl1%` AND `col` LIKE `%usl2%` AND `col` LIKE `%usl3%`) OR
    (`col` LIKE `%usl1%` AND `col` NOT LIKE `%usl2%` AND `col` LIKE `%usl3%`) OR
    (`col` LIKE `%usl1%` AND `col` LIKE `%usl2%` AND `col` NOT LIKE `%usl3%`)
    UNION SELECT * FROM `table` WHERE 
    (`col` LIKE `%usl1%` AND `col` NOT LIKE `%usl2%` AND `col` NOT LIKE `%usl3%`) OR
    (`col` NOT LIKE `%usl1%` AND `col` NOT LIKE `%usl2%` AND `col` LIKE `%usl3%`) OR
    (`col` NOT LIKE `%usl1%` AND `col` NOT LIKE `%usl2%` AND `col` LIKE `%usl3%`)
    
     
    _________________________
  4. !Knyaz2010!

    !Knyaz2010! Member

    Joined:
    24 Jun 2010
    Messages:
    57
    Likes Received:
    5
    Reputations:
    5
    Прикольно! Пасибо ребята! Всё отлично заработало! Вы подсказали мне имеено то что надо! Теперь осталось ток мелочи сделать и можна сдавать! Спасибо ещё раз огромное!
     
    #4 !Knyaz2010!, 15 Nov 2010
    Last edited: 15 Nov 2010
    1 person likes this.
  5. Mystery

    Mystery Member

    Joined:
    16 Nov 2010
    Messages:
    32
    Likes Received:
    5
    Reputations:
    0
    можно было ещё рассмотреть
    mysql boolean search
    http://dev.mysql.com/doc/refman/5.1/en/fulltext-search.html
    там решения по интереснее