Есть ли лучший способ использовать LIKE для нескольких значений в MYSQL? - PullRequest
0 голосов
/ 28 февраля 2020

Скажем, есть таблица user, как показано ниже:

+----------+------------------+------+-----+---------+----------------+
| Field    | Type             | Null | Key | Default | Extra          |
+----------+------------------+------+-----+---------+----------------+
| id       | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| name     | char(64)         | NO   |     | NULL    |                |
| img_hash | varchar(32)      | NO   |     |         |                |
+----------+------------------+------+-----+---------+----------------+

И я хочу сделать нечеткое совпадение для имени поля, и в списке есть несколько имен, ожидающих совпадения в виде:

["name1", "name2", "name3", ...]

Я собираюсь сделать с:

select 
    id, name, img_hash 
from
    user
where name like "%name1%" 
or name like "%name2%"
or name like "%name3%"
...

Если есть лучший способ сделать работу нечеткого соответствия в этой проблеме?

Ответы [ 2 ]

2 голосов
/ 28 февраля 2020

Вы можете попробовать REGEXP

SELECT ID, NAME, IMG_HASH FROM USER 
WHERE NAME REGEXP 'name1|name2|name3'

Более простая версия будет выглядеть примерно так, как показано ниже. Вы можете скопировать и вставить имена непосредственно внутри CONCAT_WS

SELECT ID, NAME, IMG_HASH FROM USER 
WHERE NAME REGEXP CONCAT_WS("|","name1", "name2","name3");

ПРОВЕРЬТЕ ДЕМО ЗДЕСЬ

Обратите внимание, что это может быть медленнее, чем при использовании LIKE

0 голосов
/ 28 февраля 2020

Расстояние Левенштейна - Сколько изменений требуется для преобразования одного в другое.

Soundex () - Функция SOUNDEX преобразует фразу в четырехсимвольный код , Первый символ - это первая буква фразы. Гласные пропускаются, если только первая буква фразы не является гласной, а остальные три символа представляют остальную часть фразы

Difference () - Оценивает два выражения и присваивает значение от 0 до 4, где 0 - практически полное отсутствие сходства, а 4 - одинаковые или очень похожие фразы. Это значение получено из числа одинаковых символов в SOUNDEX каждой фразы

Сравнение

...