Ett sätt att göra det kan vara att konvertera apple, oranges, pears
till apple|oranges|pears
och använd RLIKE
(dvs reguljärt uttryck) för att matcha det.
Till exempel, "John gillade att äta äpplen" matchar det vanliga uttrycket "äpple|apelsin|päron".
Först, för att konvertera 'äpple, apelsiner, päron' till regex-formen, ersätt alla ', ' med '|' med REPLACE
. Använd sedan RLIKE
för att välja de sökordsposter som matchar:
SELECT *
FROM keywords_table
WHERE 'John liked to eat apples' RLIKE REPLACE(keywords,', ','|');
Detta beror dock på att din kommaseparation är konsekvent (dvs. om det finns en rad som ser ut som apples,oranges
detta fungerar inte som REPLACE
ersätter ett kommatecken följt av ett mellanslag (enligt dina exempelrader).
Jag tror inte heller att det kommer att skala upp särskilt bra.
Och om du har en mening som "John gillade att äta ananas", skulle den matcha båda raderna ovan (eftersom den har "äpple" i den). Du kan sedan försöka lägga till ordgränser till det reguljära uttrycket (dvs WHERE $sentence RLIKE '[[:<:]](apple|oranges|pears)[[:>:]]'
), men detta skulle förstöra matchningen när du har pluralformer ('äpplen' skulle inte matcha '[wordboundary]apple[wordboundary]').