как найти точные слова из предложения в mysql

171
11 августа 2021, 05:40

как найти точные слова из предложения в mysql, например, в таблице есть столбец где находится категории "music","movie" и в поиске пользователь введет не слово, а допустим, большое предложение "shoping music world movie travel news" а в ответ он получит столбцы "music" и "movie"?

Answer 1

Когда же вы начнете хотя бы просматривать информацию на первоисточнике перед заданием вопроса, а не спрашивать очевидное и описанное в документации? (Не лично к Вам, @Kizat Suleimenov, - ко всем вопрошающим об очевидных вещах.) Ведь даже вся документация на русском языке доступна, читай - не хочу!.. :(

Приведенные варианты решения задачи созданы методом копипаста из примеров документации с незначительными правками.

Вариант 1.

function find_by_words(string $input_string) {
    $words = str_word_count($input_string, 1);
    if (!empty($words)) {
        $result = db_find_by_words($words);
        return $result;
    }
    return null;
}
function db_find_by_words(array $words) {
    $mysqli = new mysqli('localhost', 'my_user', 'my_password', 'database');
    if (mysqli_connect_errno()) {
        printf("Не удалось подключиться: %s\n", mysqli_connect_error());
        return null;
    }
    $string = implode('% OR category LIKE %', $words);
    $query = 'SELECT * FROM table WHERE category LIKE %' . $string . '%';
    $query_result = $mysqli->query($query);
    if ($query_result === false) {
        echo 'Query error: ', $mysqli->error, "\n";
        return null;
    }
    $result = [];
    while ($row = $query_result->fetch_assoc()) {
        $result[] = $row;
    }
    return $result;
}

Вариант 2. Функция db_find_by_words() берется из предыдущего примера.

function find_by_words(string $input_string) {
    $input_string = str_replace(['.', ',', ':', '!', '?'], ' ', trim($input_string));
    $input_string = str_replace('  ', ' ', $input_string);
    $words = explode(' ', $input_string);
    if (!empty($words)) {
        $result = db_find_by_words($words);
        return $result;
    }
    return null;
}

Использованные методы PHP mysqli::query(), mysqli_result::fetch_assoc()

Используемый оператор MySQL LIKE

P.S. Если очень захочется посмотреть, что находится в переменной, то есть еще var_dump().

P.P.S. Если после тщательного изучения документации по указанным мною ссылкам останутся вопросы - я не виноват! RTFM рулит.

P.P.P.S. Чувствую себя соавтором методички для студентов первого курса обучения... :(

READ ALSO
Как выполнить проверку заполнено поле или нет?

Как выполнить проверку заполнено поле или нет?

У меня есть поле с картинкой (Input type file), если его заполнить (То-есть указать путь к картинке) то скрипт сработает, но если не заполнять то скрипт...

198
Изменить индексы в массиве

Изменить индексы в массиве

Есть массив $my_array:

248
switch (true) + case по array[key]

switch (true) + case по array[key]

Подскажите, почему срабатывает только первый case, а второй нет?

325
Phpunit, Как сделать запрос к бд?

Phpunit, Как сделать запрос к бд?

Есть тесты, которые выполняются и записывают некоторые данные в бдЕсть метод в конце, который должен сделать запрос в бд и вытащить данные

137