За последние 24 часа нас посетили 21462 программиста и 1018 роботов. Сейчас ищут 747 программистов ...

Поиск по сайту PHP Mysql LIKE

Тема в разделе "PHP для новичков", создана пользователем German, 1 май 2019.

Метки:
  1. German

    German Новичок

    С нами с:
    4 окт 2018
    Сообщения:
    9
    Симпатии:
    0
    Добрый вечер, столкнулся с такой проблемой: Первый раз пишу поиск по своему сайту, вся выдача выгружается из БД, но скрипт работает только если в поиске забито одно слово или точная последовательность. То есть если в БД есть запись "Монета Российская серебряная" а в поиске забили "Монета серебряная" то результат будет пустой, при этом по запросам "Монета Российская" или "Российская серебряная" или одному любому слову выводит все что подходит.

    Код такой:
    Код (Text):
    1. $search = $_POST['search'];
    2.                     $result = mysqli_query($connection, "SELECT * FROM `product` WHERE `name` LIKE '%$search%'");
    3.                     $result_go = mysqli_fetch_assoc($result);
    4.                     while($result_go = mysqli_fetch_assoc($result)){
    5.                         echo $result_go['name'];
    6.                     }
    Беда в том что я совсем пень в php.
    Заранее спасибо.
     
  2. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Это как-то должно стимулировать сообщество к ответу?
    Изучайте полнотекстовый поиск и будет вам счастье.
     
  3. machetero

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

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Код (PHP):
    1. $raw = $_POST['search'];
    2. $explodedSearch = explode(' ',$raw);
    3. $escapedVals = array_map('mysqli_real_escape_string',$explodedSearch);
    4. $prefix = "'%".$raw."%' OR LIKE";
    5. $queryPart = implode("%' OR LIKE '%", $explodedSearch);
    6. $queryPart .= "%'";
    7. $result = mysqli_query($connection, "SELECT * FROM `product` WHERE `name` LIKE $prefix.$queryPart");
    8. while($result_go = mysqli_fetch_assoc($result)){
    9.           echo $result_go['name'];                  
    10. }
    --- Добавлено ---
    будет искать слова по отдельности. но это всё равно далеко до нормального поиска
     
    #3 machetero, 1 май 2019
    Последнее редактирование: 1 май 2019
  4. German

    German Новичок

    С нами с:
    4 окт 2018
    Сообщения:
    9
    Симпатии:
    0
    К сожалению совсем не работает, а точка перед знаком равенства тут нужна?
    Но собственно что с ней, что без нее результат нулевый, форма не выдает ответов вообще.
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754