如何计算Mysql数据库行中特定单词的出现次数?

时间:2014-06-12 12:10:49

标签: php mysql

我是PHP的新手。我想计算MySQL数据库行中特定单词的出现次数。 例如:名称和说明有两列。

---------------------------------------------------------------
| name | description                                          |
---------------------------------------------------------------
| abcd | My name ***is*** abcd. My father's name ***is*** xyz |
---------------------------------------------------------------
| xyzt | My name ***is*** xyz. I am a good girl.              |
---------------------------------------------------------------

我想计算第一行描述列中'is'一词的出现次数。在上面的示例中,“ ”在第一行中出现两次,在第二行中出现一次。请指导我。

4 个答案:

答案 0 :(得分:2)

StackOverflow上有很多纯SQL尝试解决方案,但大多数都计算字符串,而不是单词。所以let's reiterate

一般来说SQL,特别是MySQL,不适合这项工作。你最好用PHP做(如果结果集是"足够小& #34):

$count = preg_match_all("/\\b$word\\b/", $input, &$matches);

Alternative, richer solutions基于str_word_count()存在。

请注意,可以在纯SQL中实现:

  • with a stored procedure like this one

    在此示例中,将正则表达式替换为[[:<:]]your_word[[:>:]]以匹配特定单词。然后只是SELECT wordcount(your_column) FROM your_table。通过添加输入参数(计算出现次数的单词)来改进过程。然后* RLIKE CONCAT('[[:<:]]', input_parameter, '[[:>:]]')

  • 即使没有存储过程(但是with the help of an auxiliary table)。

    在此示例中,将HAVING word <> ' '替换为HAVING word <> 'your_word'以计算特定单词。 GROUP BY word, maintable.id(而不仅仅是word)逐行获取详细信息。添加WHERE子句以过滤掉行。缺点:只有空格被识别为单词分隔符。

我认为使用基于PHP的解决方案的好处是显而易见的。

答案 1 :(得分:1)

查询:

SELECT name,(CHAR_LENGTH(description)-
        CHAR_LENGTH(REPLACE(description,'is','')))/CHAR_LENGTH('is') AS TotalCount
FROM TableName
GROUP BY name

结果:

NAME    TOTALCOUNT
abcd    2
xyzt    1

Fiddle Demo

修改

由于此查询还会计算包含的任何单词(如'this'),我们可以查询'is'(前面有一个空格,后面有一个空格)。

SELECT name,(CHAR_LENGTH(description)-
        CHAR_LENGTH(REPLACE(description,' is ','')))/CHAR_LENGTH(' is ') AS TotalCount
FROM TableName
GROUP BY name

答案 2 :(得分:0)

尝试使用substr_count

substr_count ( string $haystack , string $needle)

它计算字符串中单词出现的次数。

答案 3 :(得分:0)

传递数组中的所有行:

$query= "SELECT * from  yourtable "; 
$result= $mysqli->query($query);
while ($row = mysqli_fetch_assoc($result)) {
$rows[]=$row;
}

使用count:

转换数组中的数组
foreach ($rows as $row){
$name=$row['name'];
$description=$row['description'];
$myarr[$name]=substr_count($description, 'is');
}

您获得所需的数组:

abcd => 2
xyzt => 1
...