Как получить результаты из базы данных при наборе и сопоставлении всех данных?

0

У меня есть функция поиска местоположения на моем сайте, где я могу искать местоположения. Например, если я ищу "новый йорк", я получаю результат, но если я ищу местоположение по первому слову "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" или "новый", я не получаю никаких результатов.

Как это сделать?

Теги:

2 ответа

0

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

https://github.com/wataridori/simple-fuzzy-search

0

В вашем заявлении sql используются звуки, подобные оператору, который используется для сравнения того, как звучат (произносится) две строки. Вы должны использовать простой, like оператор для сопоставления подстрок:

... WHERE location LIKE  :s
  • 0
    Получу ли я правильное местоположение, если введу «сейчас йорк»?
  • 1
    Нет, ты бы не стал. Это намного сложнее. Я сомневаюсь, что Нью-Йорк, а теперь и Йорк объявляются одинаково.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню