Een manier om dit te doen zou kunnen zijn om apple, oranges, pears
te converteren naar apple|oranges|pears
en gebruik RLIKE
(dwz reguliere expressie) om ermee te matchen.
'John at bijvoorbeeld graag appels' komt bijvoorbeeld overeen met de regex 'appel|orange|peren'.
Om 'appel, peren, peren' om te zetten naar de regex-vorm, vervang eerst alle ', ' door '|' met behulp van REPLACE
. Gebruik dan RLIKE
om de trefwoorden te selecteren die overeenkomen:
SELECT *
FROM keywords_table
WHERE 'John liked to eat apples' RLIKE REPLACE(keywords,', ','|');
Dit hangt er echter van af of uw kommascheiding consistent is (d.w.z. als er één rij is die eruitziet als apples,oranges
dit werkt niet als de REPLACE
vervangt een komma gevolgd door een spatie (volgens uw voorbeeldrijen).
Ik denk ook niet dat het goed zal opschalen.
En als je een zin hebt als 'Jan vond het leuk om ananas te eten', zou deze overeenkomen met beide bovenstaande rijen (omdat er 'appel' in staat). Je zou dan kunnen proberen om woordgrenzen aan de regex toe te voegen (bijv. WHERE $sentence RLIKE '[[:<:]](apple|oranges|pears)[[:>:]]'
), maar dit zou het matchen verpesten als je meervoudsvormen hebt ('appels' zouden niet overeenkomen met '[wordboundary]apple[wordboundary]').