Jedním ze způsobů, jak to udělat, může být převod apple, oranges, pears
na apple|oranges|pears
a použijte RLIKE
(tj. regulární výraz), aby se s ním shodoval.
Například 'John rád jedl jablka' odpovídá regulárnímu výrazu 'jablko|pomeranč|hrušky'.
Nejprve, chcete-li převést 'jablko, pomeranče, hrušky' do regulárního výrazu, nahraďte všechny ', ' za '|' pomocí REPLACE
. Poté použijte RLIKE
vyberte položky klíčových slov, které se shodují:
SELECT *
FROM keywords_table
WHERE 'John liked to eat apples' RLIKE REPLACE(keywords,', ','|');
To však závisí na tom, zda je vaše oddělení čárkou konzistentní (tj. pokud existuje jeden řádek, který vypadá jako apples,oranges
toto nebude fungovat jako REPLACE
nahradí čárku následovanou mezerou (jak je uvedeno v řádcích vašeho příkladu).
Také si nemyslím, že se to moc dobře rozšíří.
A pokud máte větu jako „John rád jedl ananas“, odpovídala by oběma řádkům výše (protože obsahuje „jablko“). Pak byste mohli zkusit přidat hranice slov do regulárního výrazu (tj. WHERE $sentence RLIKE '[[:<:]](apple|oranges|pears)[[:>:]]'
), ale to by pokazilo párování, když máte množná čísla ('apples' by se neshodovalo s '[wordboundary]apple[wordboundy]').