如何在mysql pdo中计算句子中的单词
Posted
技术标签:
【中文标题】如何在mysql pdo中计算句子中的单词【英文标题】:how to count the words in a sentence in mysql pdo 【发布时间】:2015-08-13 11:13:40 【问题描述】:我将如何计算数据库中句子中的单词,例如:
id words
1 bananas, mango, orange, watermelon
2 bananas, mango, orange, watermelon
3 bananas, mango, orange, watermelon
4 bananas, mango, orange, watermelon
我只想数芒果的数量,如果我数了,我得到的结果是:4
这是我的查询
"SELECT count(words)as total FROM fuit WHERE ?????";
?这意味着我不知道如何将它与 WHERE 一起使用..
但是如何在 mysql 和 pdo 中进行查询呢?
【问题讨论】:
对您要查找的内容更具体一点。你想知道有多少行有“芒果”这个词,或者你想知道每行出现多少次“芒果” RST:抱歉我的问题不太清楚,谢谢已经提醒。就像你说的,我只想知道每行出现多少次“芒果”.. 【参考方案1】:假设“mango”每行只能出现一次,可以使用find_in_set
定位。请注意,find_in_set
适用于逗号分隔的字符串,因此您必须去掉空格:
SELECT COUNT(*)
FROM fruit
WHERE FIND_IN_SET ('mango', REPLACE(words, ' ', '')) > 0
【讨论】:
【参考方案2】:如果words
字段中没有空格(例如bananas,mango,orange,watermelon
),您可以使用FIND_IN_SET
:
SELECT ... WHERE FIND_IN_SET('mango', words)
使用空格,你必须使用正则表达式,例如:
SELECT ... WHERE words RLIKE '(^|, )mango($|,)'
更好的是,考虑“规范化”您的数据 - 创建一个单独的 words
表:
id word
1 mango
2 orange
etc
还有一个链接表:
doc_id word_id
1 1
1 2
etc
【讨论】:
感谢“规范化”数据,但这就像一个“标签”,这是一个输入文本中的任何内容,我不知道如何规范化,因为这个过程在一个插入中。 @RiskiFebriansyah:如果这些是标签,您绝对应该将它们标准化。考虑重命名标签、删除标签等。这对于您当前的系统来说将非常麻烦。 非常感谢@georg 的建议,我会尝试改变它。以上是关于如何在mysql pdo中计算句子中的单词的主要内容,如果未能解决你的问题,请参考以下文章