2016-11-30 3 views
0

Хорошо, это делает мое серое вещество в прочитанном мной и просматривается через mysql и просматривается различные варианты, и я могу только думать, что это настолько очевидно, что я просто слепой.fulltext mysql поиск и совпадение с точной строкой

Короче говоря, я создаю облако тегов, и часть процесса состоит в том, чтобы проверить, существует ли слово, и если да, то +1, но это должна быть точная фраза.

Итак, я понял, что поиск по полнотекстовому поиску будет лучшим вариантом.

Как пример.

$string = "hair dryer"; 

$string = '"'.$string.'"'; //enclose string in quotation marks to define must be an exact match 



//$string = mysqli_real_escape_string($mysqli,$string); // removed to see if this was effecting the result. 

$sql = "SELECT * FROM `search_keyword` WHERE Match (`keyword`) Against ('$string' IN BOOLEAN MODE) LIMIT 1"; 
$result=mysqli_query($mysqli,$sql); 

Так что тест был в БД у меня есть строка со словом «фен», и это соответствует его - хорошему результату

Однако если изменить строку «волосы» это все еще вытаскивает «фен», который он не должен делать, поскольку это не точное совпадение.

Я читал все и каждый путь, я пытаюсь это сделать, я получаю неправильный результат.

(
[0] => Array 
    (
     [keyword] => hair dryer 
     [id] => 25 
    ) 

) /// should be empty and hair as a single row is not found 

Пожалуйста, любые советы приветствуются :-)

+0

Тогда почему бы не 'SELECT count (*) FROM ... WHERE Keyword = $ string'. Если вам нужен только определенный матч. – Mruf

+0

Да, он работает с использованием этого метода, однако каждый раз по какой-то причине он не может забрать существующее слово и добавляет другого в таблицу, если это не так. Поэтому я подумал, что если бы я использовал полный текст, я бы получил более точный метод и не создавал дубликаты. Я смущен, почему кажется, что так сложно получить запрос, чтобы вытащить только точное совпадение. –

+0

, если я правильно понимаю вашу проблему. Полный текстовый поиск - неправильное направление, потому что полный текст создает инвертированный указатель, даже если вы установите предельный лимит символов на 1, тогда также «волосы» будут соответствовать «феном». Вам нужно работать с PHP, как обрабатывать ключевое слово перед запросом, например trim, strtolower, а затем использовать следующий запрос: SELECT count (*) FROM ... WHERE Keyword = trim ($ string) или Group query в поле Keyword. –

ответ

0

Вы можете сделать это с PHP. Сначала преобразуйте строку в массив, а затем сравните оба массива, чтобы увидеть, есть ли совпадение.

 $string = explode(" ",$string); 
     $sql = "SELECT keyword FROM search_keyword"; 
    $result=mysqli_query($mysqli,$sql); 
$compareArrays = array_intersect($result,$string); 
     if (is_array($compareArrays) && count($compareArrays) > 0) { 

ли что-то в результате, как если бы $ compareArrays является Гретер, чем один, это означает, что у вас есть точное совпадение. array_intersect сравнивает 2 привязки, чтобы увидеть, есть ли точное совпадение. Таким образом, я не думаю, что вы получите совпадение с «волосами» в виде струны, но вы получите один с «феном». Это работает?

Смежные вопросы