在 MYSQL 中对多个值使用 LIKE 有更好的方法吗?

Is there better way to use LIKE for multiple values in MYSQL?

假设有一个 table 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%"
...

是否有更好的方法来解决这个问题?

谢谢。

你可以试试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");

CHECK DEMO HERE

请注意,这可能比使用 LIKE

Levenstein distance - 将一个转换为另一个需要多少更改。

Soundex() - SOUNDEX 函数将短语转换为四字符代码。第一个字符是短语的第一个字母。除非短语的第一个字母是元音并且其他三个字符代表短语的其余部分,否则元音将被省略

Difference() - 评估两个表达式并分配一个介于 0 和 4 之间的值,其中 0 表示几乎没有相似性,4 表示相同或非常相似的短语。该值是根据每个短语 SOUNDEX 中相同

的字符数得出的

Comparison