Mysql
 sql >> Base de données >  >> RDS >> Mysql

requête mysql pour faire correspondre une phrase à des mots-clés dans un champ

Une façon de le faire pourrait être de convertir apple, oranges, pears à apple|oranges|pears et utilisez RLIKE (c'est-à-dire une expression régulière) pour la comparer.

Par exemple, "Jean aimait manger des pommes" correspond à la regex "pomme|orange|poires".

Tout d'abord, pour convertir 'pomme, oranges, poires' au format regex, remplacez tous les ', ' par '|' en utilisant REPLACE . Ensuite, utilisez RLIKE pour sélectionner les entrées de mots clés qui correspondent :

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

Cependant, cela dépend de la cohérence de votre séparation par des virgules (c'est-à-dire s'il y a une ligne qui ressemble à apples,oranges cela ne fonctionnera pas car le REPLACE remplace une virgule suivie d'un espace (selon vos lignes d'exemple).

Je ne pense pas non plus qu'il évoluera très bien.

Et, si vous avez une phrase comme « John aimait manger des ananas », elle correspondrait aux deux lignes ci-dessus (car elle contient « pomme »). Vous pouvez ensuite essayer d'ajouter des limites de mots à la regex (c'est-à-dire WHERE $sentence RLIKE '[[:<:]](apple|oranges|pears)[[:>:]]' ), mais cela bousillerait la correspondance lorsque vous avez des pluriels ('apples' ne correspondrait pas à '[wordboundary]apple[wordboundary]').