En måde at gøre det på kunne være at konvertere apple, oranges, pears
til apple|oranges|pears
og brug RLIKE
(dvs. regulært udtryk) for at matche det.
For eksempel matcher "John kunne lide at spise æbler" det regulære udtryk "æble|appelsin|pærer".
For at konvertere 'æble, appelsiner, pærer' til regex-formen skal du først erstatte alle ', ' med '|' ved hjælp af REPLACE
. Brug derefter RLIKE
for at vælge de søgeordsposter, der matcher:
SELECT *
FROM keywords_table
WHERE 'John liked to eat apples' RLIKE REPLACE(keywords,', ','|');
Dette afhænger dog af, at din kommaadskillelse er konsistent (dvs. hvis der er én række, der ligner apples,oranges
dette vil ikke fungere som REPLACE
erstatter et komma efterfulgt af et mellemrum (i henhold til dine eksempelrækker).
Jeg tror heller ikke, det vil opskalere særlig godt.
Og hvis du har en sætning som 'John kunne lide at spise ananas', ville den matche begge rækker ovenfor (da den har 'æble' i sig). Du kan derefter prøve at tilføje ordgrænser til det regex (dvs. WHERE $sentence RLIKE '[[:<:]](apple|oranges|pears)[[:>:]]'
), men dette ville ødelægge matchningen, når du har flertal ('æbler' ville ikke matche '[ordgrænse]æble[ordgrænse]').