У меня есть функция поиска местоположения на моем сайте, где я могу искать местоположения. Например, если я ищу "новый йорк", я получаю результат, но если я ищу местоположение по первому слову "l" или используя слово "новый" или пропустив какой-либо символ из слова "новый йорк", я получу ничего такого.
JS:
document.getElementById('text-input').addEventListener('keyup' , searchLocation);
Функция searchLocation делает запрос AJAX файлу PHP, который соединяет базу данных и возвращает совпадения.
Вот код внутри файла PHP:
$query = $_POST['q'];
$pattern = '/^[a-zA-Z]+(\s+[a-zA-Z]+)*$/';
if(preg_match($pattern, $query)){
$stmt = $pdo->prepare('SELECT * FROM users WHERE id IN (SELECT MIN(id) FROM users WHERE location SOUNDS LIKE :s
GROUP BY location
);');
$stmt->bindValue(':s', '%' . $query . '%', PDO::PARAM_STR);
$stmt->execute();
$value = $stmt->fetch();
$count = $stmt->rowCount();
if($count > 0){
echo $value['location'];
}else{
echo 'No Results Found';
}
}
Я должен набрать целое слово и даже если есть пропущенное орфографическое слово, например "now york", он найдет "новый йорк".
Но если я наберу "n" или "новый", я не получаю никаких результатов.
Как это сделать?
Я рекомендую использовать примерное сопоставление строк (нечеткий поиск). Пожалуйста, проверьте приведенную ниже ссылку, есть простой пример, который вы можете использовать.
В вашем заявлении sql используются звуки, подобные оператору, который используется для сравнения того, как звучат (произносится) две строки. Вы должны использовать простой, like
оператор для сопоставления подстрок:
... WHERE location LIKE :s