Кто-нибудь знает, как искать частичные слова в базе данных.
Например —
Моя строка Двадцать первый век Фокс
Значение столбца базы данных 21-й век Фокс
Как получить результат, используя MySQL LIKE или LOCATE или любой другой запрос?
То, что я хочу соответствовать — это «St Century Fox»
Вы, вероятно, должны расследовать FULLTEXT
поиск; он предназначен для поиска таких вещей, как fox
в 21st Century Fox
, Это включает в себя создание специального индекса, а затем поиск с использованием MATCH()
сказуемое.
Но, понимая, что 21st
а также Twenty-first
эквивалентны более сложная задача. Это включает в себя списки синонимов или других источников знаний. Если вам нужно сделать это, вы должны исследовать сфинкса или люцена.
Используйте функцию Soundex для двух строк …
<?php
$str = "Twenty-first Century Fox";
$str1 = "21st Century Fox";
echo soundex($str);
echo soundex($str1);
?>
Простым решением было бы разбить строку на количество слов и выполнить поиск, используя OR
а также LIKE
, В этом случае.
$keyword = 'Twenty-first Century Fox';
$keywords = explode($keyword,' ');
$keySearch = array();
foreach ($keywords as $keyword){
$keySearch[] = 'column LIKE \'%'.$keyword.'%\'';
}
$query = 'SELECT * FROM tableName WHERE '.implode(' OR ',$keySearch);