一种实现方法是转换apple, oranges, pears
为apple|oranges|pears
并使用RLIKE
(即正则表达式)与之匹配。
例如,“约翰喜欢吃苹果”与正则表达式“苹果|橙色|豌豆”匹配。
首先,要将“苹果,橘子,梨”转换为正则表达式,请将所有“,”替换为“ |” 使用REPLACE
。然后使用RLIKE
来选择匹配的关键字条目:
SELECT *
FROM keywords_table
WHERE 'John liked to eat apples' RLIKE REPLACE(keywords,', ','|');
但是,这确实取决于您的逗号分隔是否一致(即,如果有一行看起来像apples,oranges
这样,因为REPLACE
替换逗号后接一个空格(根据您的示例行),这行将不起作用。
我也不认为它会很好地扩展。
而且,如果您有一个类似“约翰喜欢吃菠萝”的句子,它将与上面的两行都匹配(因为它的确包含“苹果”)。然后,您可以尝试在正则表达式中添加单词边界(即WHERE $sentence RLIKE '[[:<:]](apple|oranges|pears)[[:>:]]'
),但是当您使用复数形式时(“ apples”将不与“ [wordboundary] apple [wordboundary]”匹配),这将使匹配变得更糟。