Uma maneira de fazer isso pode ser converter
apple, oranges, pears
para apple|oranges|pears
e use RLIKE
(ou seja, expressão regular) para corresponder a ela. Por exemplo, 'John gostava de comer maçãs' corresponde ao regex 'apple|orange|pears'.
Primeiro, para converter 'maçã, laranjas, pêras' para a forma regex, substitua todos ', ' por '|' usando
REPLACE
. Em seguida, use RLIKE
para selecionar as entradas de palavra-chave que correspondem:SELECT *
FROM keywords_table
WHERE 'John liked to eat apples' RLIKE REPLACE(keywords,', ','|');
No entanto, isso depende de sua separação por vírgulas ser consistente (ou seja, se houver uma linha que se pareça com
apples,oranges
isso não funcionará como REPLACE
substitui uma vírgula seguida por um espaço (conforme suas linhas de exemplo). Eu também não acho que vai escalar muito bem.
E, se você tiver uma frase como 'João gostava de comer abacaxi', ela corresponderia a ambas as linhas acima (já que tem 'maçã' nela). Você pode então tentar adicionar limites de palavras ao regex (ou seja,
WHERE $sentence RLIKE '[[:<:]](apple|oranges|pears)[[:>:]]'
), mas isso estragaria a correspondência quando você tem plurais ('apples' não corresponderia a '[wordboundary]apple[wordboundary]').