Digamos que hay una tabla user como a continuación:

+----------+------------------+------+-----+---------+----------------+
| 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   |     |         |                |
+----------+------------------+------+-----+---------+----------------+

Y quiero hacer una coincidencia difusa en el nombre del campo, y hay varios nombres en una lista pendiente de coincidencia como:

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

Estoy tratando de hacer con:

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

Si hay una mejor manera de hacer un trabajo de coincidencia difusa en este problema?

Gracias.

0
jia Jimmy 28 feb. 2020 a las 09:24

2 respuestas

La mejor respuesta

Puede probar REGEXP

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

La versión más simple sería algo como a continuación. Puede copiar y pegar los nombres directamente dentro de CONCAT_WS

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

VER DEMO AQUÍ

Tenga en cuenta que esto puede ser más lento que usar LIKE

2
Arun Palanisamy 28 feb. 2020 a las 07:36

Distancia de Levenstein: cuántos cambios se requieren para convertir uno a otro.

Soundex (): la función SOUNDEX convierte una frase en un código de cuatro caracteres. El primer carácter es la primera letra de la frase. Las vocales se omiten a menos que la primera letra de la frase sea vocal y los otros tres caracteres representen el resto de la frase.

Difference (): evalúa dos expresiones y asigna un valor entre 0 y 4, con 0 siendo poco o nada parecido y 4 representando las mismas o muy similares frases. Este valor se deriva de la cantidad de caracteres en el SOUNDEX de cada frase que son iguales

Comparación

0
Shep 28 feb. 2020 a las 06:42