sql >> Base de Datos >  >> RDS >> Mysql

consulta mysql para hacer coincidir la oración con las palabras clave en un campo

Una forma de hacerlo podría ser convertir apple, oranges, pears a apple|oranges|pears y use RLIKE (es decir, expresión regular) para que coincida con él.

Por ejemplo, 'A Juan le gustaba comer manzanas' coincide con la expresión regular 'manzana|naranja|peras'.

Primero, para convertir 'manzana, naranja, pera' a la forma regular, reemplace todo ',' por '|' usando REPLACE . Luego usa RLIKE para seleccionar las entradas de palabras clave que coincidan con:

SELECT * 
FROM keywords_table
WHERE 'John liked to eat apples' RLIKE REPLACE(keywords,', ','|');

Sin embargo, esto depende de que la separación por comas sea consistente (es decir, si hay una fila que parece apples,oranges esto no funcionará como REPLACE reemplaza una coma seguida de un espacio (según sus filas de ejemplo).

Tampoco creo que se amplíe muy bien.

Y, si tiene una oración como 'A John le gustaba comer piñas', coincidiría con las dos filas anteriores (ya que tiene 'manzana'). Luego, podría intentar agregar límites de palabras a la expresión regular (es decir, WHERE $sentence RLIKE '[[:<:]](apple|oranges|pears)[[:>:]]' ), pero esto arruinaría la coincidencia cuando tienes plurales ('manzanas' no coincidiría con '[límite de palabra] manzana [límite de palabra]').