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]').