我一直在浏览互联网,意识到MySQL并不是达到此目的的最佳方法,但无论如何我都在问。任何人看到或使用过哪种查询,函数或存储过程,都可以在整个文本列中获得单词的出现频率。
ID|comment
----------------------
Ex. 1|I love this burger
2|I hate this burger
word | count
-------|-------
burger | 2
I | 2
this | 2
love | 1
hate | 1
这个解决方案似乎可以完成工作(从此页面几乎逐字被盗)。它需要一个auxiliary
表,该表填充从1到至少不同单词的预期数量的连续数字。检查辅助表是否足够大,否则结果将是错误的(显示无错误),这一点非常重要。
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(maintable.comment, ' ', auxiliary.id), ' ', -1) AS word,
COUNT(*) AS frequency
FROM maintable
JOIN auxiliary ON
LENGTH(comment)>0 AND SUBSTRING_INDEX(SUBSTRING_INDEX(comment, ' ', auxiliary.id), ' ', -1)
<> SUBSTRING_INDEX(SUBSTRING_INDEX(comment, ' ', auxiliary.id-1), ' ', -1)
GROUP BY word
HAVING word <> ' '
ORDER BY frequency DESC;
这种方法效率极低,因为它不能使用任何索引。
作为替代,我将使用一个统计表,该表将与触发器保持最新。也许使用上述方法初始化统计信息表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句