我有一个带有关键字列表的 mysql 表,例如:
id | keywords
---+--------------------------------
1 | apple, oranges, pears
2 | peaches, pineapples, tangerines
我正在尝试找出如何使用以下输入字符串查询此表: 约翰喜欢吃苹果
有没有mysql查询类型可以用一句话查询一个字段并返回结果(在我的例子中,记录#1)?
最佳答案
一种方法是转换 apple, oranges, pears
至 apple|oranges|pears
并使用 RLIKE
(即正则表达式)来匹配它。
例如,“John liked to eat apples”匹配正则表达式“apple|orange|pears”。
首先,要将“apple, oranges, pears”转换为正则表达式,将所有“,”替换为“|”使用 REPLACE
.然后使用 RLIKE
选择匹配的关键字条目:
SELECT *
FROM keywords_table
WHERE 'John liked to eat apples' RLIKE REPLACE(keywords,', ','|');
但这确实取决于您的逗号分隔是否一致(即,如果有一行看起来像 apples,oranges
这将不起作用,因为 REPLACE
替换逗号后跟一个空格(根据您的示例行).
我也不认为它会很好地扩展。
而且,如果您有一个像“John liked to eat pineapples”这样的句子,它会匹配上面的两行(因为它确实包含“apple”)。然后您可以尝试向正则表达式添加单词边界(即 WHERE $sentence RLIKE '[[:<:]](apple|oranges|pears)[[:>:]]'
),但是当您有复数时,这会搞砸匹配('apples' 不会匹配 '[wordboundary]apple[wordboundary]')。
关于mysql查询将句子与字段中的关键字进行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9424959/