我是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'一词的出现次数。在上面的示例中,“ ”在第一行中出现两次,在第二行中出现一次。请指导我。
答案 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
修改强>
由于此查询还会计算包含的任何单词(如'this'),我们可以查询'is'(前面有一个空格,后面有一个空格)。
SELECT name,(CHAR_LENGTH(description)-
CHAR_LENGTH(REPLACE(description,' is ','')))/CHAR_LENGTH(' is ') AS TotalCount
FROM TableName
GROUP BY name
答案 2 :(得分:0)
答案 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
...