mysql - 计算mysql表中的单词出现次数

标签 mysql sql

我从不同的网站获取评论并将其存储到表中。对于每条评论,我都会在单独的列中列出形容词名词列表。

因此,对于每条评论,这里都有 3 个主要值。

评论、adjective_list、评分

现在我想计算形容词重复的次数。之后,仅推荐那些具有重复最多时间的形容词且具有 4-5 条评论的评论。

哪种方法是正确的?

我对此的想法:

创建触发器,在有插入审核操作时执行操作。 此触发器将读取包含形容词的列,计算出现次数(不知道如何?)并存储最常见的形容词及其出现次数。

在推荐时选择出现次数最多的形容词,并查看 4-5 个评分的评论。

我不确定什么是正确的方法。任何帮助都是值得赞赏的

主表如下所示:

enter image description here

最佳答案

未经测试,但如果我正确理解您的要求,您应该能够基于类似的查询来完成这项工作:-

SELECT id, SUBSTRING_INDEX(SUBSTRING_INDEX(adj_noun, ',', aCnt + 1), ',', -1), COUNT(*)
FROM Main_Table
INNER JOIN
(
    SELECT Units.i + Tends.i * 10 + Hundreds.i * 100 AS aCnt
    (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) Units
    (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) Tens
    (SELECT 0 i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) Hundreds
) Integers_Query
ON aCnt <= (LENGTH(adj_noun) - LENGTH(REPLACE(adj_noun, ',', '')))
GROUP BY id, SUBSTRING_INDEX(SUBSTRING_INDEX(adj_noun, ',', aCnt + 1), ',', -1)

这使用子查询来获取一定范围的数字(0 到 999),并将其与表进行联接,其中数字小于或等于逗号出现在 adj_noun 列中的次数(即,减去 adj_noun 的长度(从 adj_noun 的完整长度中删除所有逗号)。然后使用 SUBSTRING_INDEX 获取到 aCnt 逗号的字符串,再次使用 SUBSTRING_INDEX 获取从该逗号到前一个逗号的字符串(从结果中排除逗号)。

COUNT/GROUP BY 应该可以让您获得每个单词在每个项目的结果列表中出现的次数。

可能效率相当低。只能处理 1000 个逗号分隔的单词(很容易扩展,但会比较慢)。

关于mysql - 计算mysql表中的单词出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22986022/

相关文章:

mysql - 如何在一个 sql 查询中有 2 个排序依据

sql - 在 PostgreSQL 中处理竞争条件

php - MySQL连接表并在相同值之间进行比较时返回第二个表的最新行

php - 根据表中的产品获取计数值

mysql - 从数据库中删除模式

php - PHP While 循环中的 HTML 表单按钮

mySQL LIKE 管道上的查询

MySQL 获取最近10条记录中的第一条记录

mysql - 如何在 express.js 的 Sequelize ORM 中比较区分大小写的字符串数据?

SQL SELECT 用于一对多特征关系以选择具有某些特征的键