Получите запись «Сан-Франциско», когда я ищу «SanF»;
SELECT * FROM table WHERE col LIKE '%san%'; Works SELECT * FROM table WHERE col LIKE '%san F%'; Works SELECT * FROM table WHERE col LIKE %sanF%'; Not Working
Я боюсь, что оператор LIKE
не является панацеей для запросов на основе текстового поиска. Если вы действительно хотите sanF
пользовательский ввод sanF
с записями, содержащими San Francisco
, тогда вам придется удалить пробелы из столбца, а затем выполнить сравнение.
SELECT * FROM table WHERE REPLACE(col, ' ', '') LIKE '%sanF%';
Вы также можете рассмотреть возможность массирования ввода пользователя на стороне приложения, чтобы ваши исходные два условия LIKE
( '%san%'
и '%san F%'
) охватывали каждый случай.
SELECT * FROM table WHERE col LIKE '%sanF%'; will never work for 'San Francisco' SELECT * FROM table WHERE REPLACE(col, ' ', '') LIKE '%sanF%';
правильное использование. Но функция REPLACE
может замедляться, и вы можете увидеть проблему производительности для большого набора данных, даже если запрос является дорогостоящим. Люди оптимизируют его, применяя индексы в столбце, или пытаясь использовать San F%
или %Francisco
. То, что мы сделали, вместо того, чтобы использовать как на стороне, мы просто выполняли как на одной стороне.
В php вы можете заменить все пробелы на _
или %
s. Или вы можете сделать это в запросе следующим образом:
SELECT * FROM table WHERE col LIKE CONCAT('%', REPLACE('San F', ' ', '%'), '%') SELECT * FROM table WHERE col LIKE CONCAT('%', REPLACE('San F', ' ', '_'), '%')
Надеюсь это поможет!