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