Я кодирую функцию поиска, используя full-text-search
и я хочу, чтобы результат отображался только в том случае, если набранные слова содержатся в таблице.
$search_value = $db->mysqli->real_escape_string("lana born to die sdkjfhsdkjfhdsjkfhdsjkfhd");
$query = "select * from `music` where match(`title`, `artist`) against ('$search_value')";
artist title
----------------------------------
lana del rey west coast
lana del rey born to die
lana del rey summertime sadness
lana del rey blue jeans
Например если я буду искать: lana born to die sdkjfhsdkjfhdsjkfhdsjkfhd
это показывает мне lana del rey born to die
в следствии. Этого не должно быть.
Я хочу, чтобы он показывал результаты, только если вы наберете для ex. lana
, lana del rey born
и так далее.
Есть идеи.
Вы можете преобразовать запрос, чтобы иметь логический полнотекстовый поиск. Это делается путем добавления + или — перед каждым словом в поисковом запросе.
В этом случае мы добавляем +, так как это стоит как AND, тогда как a — как NOT.
Таким образом, если вы хотите, чтобы оно было таким, чтобы каждое слово становилось обязательным, вы можете добавить следующий код:
PHP:
$search_value = $db->mysqli->real_escape_string("lana born to die sdkjfhsdkjfhdsjkfhdsjkfhd");
$search_value = str_replace(" ", " +", $search_value);
$query = "select * from `music` where match(`title`, `artist`) against ('$search_value' IN BOOLEAN MODE)";
Вам необходимо исправить свой запрос:
$query = "select * from `music` where `title` LIKE '%$search_value%'
OR `artist` LIKE '%$search_value%'";
Я надеюсь, что это поможет вам.