Jednym ze sposobów na to może być przekonwertowanie apple, oranges, pears
do apple|oranges|pears
i użyj RLIKE
(tj. wyrażenie regularne), aby się z nim dopasować.
Na przykład wyrażenie „Jan lubił jeść jabłka” pasuje do wyrażenia regularnego „jabłko|pomarańcza|gruszki”.
Po pierwsze, aby przekonwertować wyrażenie „jabłko, pomarańcze, gruszki” na formę regex, zamień wszystkie „,” na „|” używając REPLACE
. Następnie użyj RLIKE
aby wybrać pasujące wpisy słów kluczowych:
SELECT *
FROM keywords_table
WHERE 'John liked to eat apples' RLIKE REPLACE(keywords,', ','|');
Jednak zależy to od tego, czy separacja przecinkami jest spójna (tj. jeśli istnieje jeden wiersz, który wygląda jak apples,oranges
to nie zadziała jako REPLACE
zastępuje przecinek, po którym następuje spacja (zgodnie z przykładowymi wierszami).
Nie sądzę też, że będzie się dobrze skalować.
A jeśli masz zdanie takie jak „Jan lubił jeść ananasy”, pasuje ono do obu powyższych wierszy (ponieważ zawiera słowo „jabłko”). Następnie możesz spróbować dodać granice wyrazów do wyrażenia regularnego (np. WHERE $sentence RLIKE '[[:<:]](apple|oranges|pears)[[:>:]]'
), ale zepsułoby to dopasowanie, gdy masz liczbę mnogą ("jabłka" nie pasowałoby do "[wordboundary]jabłko[wordboundary]").