如何在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中计算句子中的单词的主要内容,如果未能解决你的问题,请参考以下文章

如何计算一个单词在句子中出现的次数?

我如何从句子中计算相同的单词?

使用正则表达式匹配MYSQL中句子中的单词

如何在Android Studio上将句子中的单词斜体?

如何在句子列表中的单词和左括号之间创建空格

如何通过C#中的特定片段从句子中提取整个单词?