PHP

Поиск точного вхождения слова

Если поле таблицы имеет индекс FULLTEXT то главное правильно составить запрос. В php у меня вышло так:
<?php

    $query = trim($_POST['query']);//Запрос например "скачать mp3"
    $stop_words = trim($_POST['stop_words']);//Стоп слова через запятую(если нужно что то отсеять)
    $exact_match = trim($_POST['exact_match']);//yes, no, или пусто

    if($_POST['stop_words'] !== ""){//если присутствуют стоп слова то добовляем знак - к каждому
      $words = explode(",", $stop_words);
      foreach($words as $word){
        $search_minus .= " -".$word;
      }
    }
    
    if($exact_match == "yes"){//$exact_match == "yes" то берем запрос в кавычки, ищет точное вхождение "скачать mp3"
      $search_plus = "\"$query\"";
    } elseif($exact_match == "no"){//$exact_match == "no" то оставим как есть, ищет любое из слов "скачать" или "mp3"
      $search_plus = $query;
    }
    else{//$exact_match == "" то добавим знак + к каждому слову из запроса, ищет и "скачать" и "mp3"
      $words = explode(" ", $query);
      foreach($words as $word){
        $search_plus .= " +".$word;
      }
    }
    
    $search = $search_plus.$search_minus;//соберем все до кучи
    $search = trim($search);//лишние пробелы наh***
    
    $q = mysql_query("SELECT * FROM `keys` WHERE MATCH(`keyword`) AGAINST('$search' IN BOOLEAN MODE)");//делаем запрос к базе данных

    while($row = mysql_fetch_array($q)){//выводим результат на экран
      $key = $row['keyword'];
      if(str_count_word($key) > $count){
        echo $key.'
';
      }
    }

?>

В запросе также можно использовать оператор усечения. Например: сигнал* будет найдено сигнал, сигнальный, сигнализация и т.д.
Добавлено: 11 Сентября 2013 12:54:19 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...