[英]How to count the occurrence of a specific word in a Mysql db row?
我是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”的出现。 在上面的示例中,“ 是 ”在第一行中两次出现,在第二行中一次出现。 请同样指导我。
StackOverflow上有许多尝试使用纯SQL的解决方案,但是大多数解决方案都计算字符串而不是单词。 因此, 让我们重申一下 :
一般来说,SQL,尤其是MySQL,并不是最适合该工作的。 您最好使用PHP(如果结果集“足够小”):
$count = preg_match_all("/\\b$word\\b/", $input, &$matches);
存在基于str_word_count()
替代性更丰富的解决方案 。
请注意, 可以在纯SQL中实现:
在本示例中,将正则表达式替换为[[:<:]]your_word[[:>:]]
以匹配特定的单词。 然后只需SELECT wordcount(your_column) FROM your_table
。 通过添加输入参数(用于计算出现次数的单词)来改进过程。 然后* RLIKE CONCAT('[[:<:]]', input_parameter, '[[:>:]]')
。
即使没有存储过程(但借助辅助表 )。
在此示例中,将HAVING word <> ' '
替换为HAVING word <> 'your_word'
以计算特定单词。 GROUP BY word, maintable.id
(而不是word
)逐行获取详细的信息。 添加WHERE
子句以过滤出行。 缺点:只有空格被识别为单词定界符。
我想采用基于PHP的解决方案的好处显而易见。
查询此:
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
编辑:
由于此查询还计算包含is的任何单词(例如'this'),因此我们可以查询'is'(前后有一个空格,后有一个空格)。
SELECT name,(CHAR_LENGTH(description)-
CHAR_LENGTH(REPLACE(description,' is ','')))/CHAR_LENGTH(' is ') AS TotalCount
FROM TableName
GROUP BY name
传递数组中的所有行:
$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
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.