我一直在上网,并意识到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
答案 0 :(得分:1)
这个解决方案似乎完成了工作(几乎逐字逐句地从this page中偷走)。它需要一个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;
这种方法效率低,因为它不能使用任何索引。
作为替代方案,我会使用一个统计表来跟踪触发器。也许用以上内容初始化统计表。
答案 1 :(得分:-1)
这样的事情应该有效。只要确保你没有传入0长度的字符串。
SET @searchString = 'burger';
SELECT
ID,
LENGTH(comment) - LENGTH(REPLACE(comment, @searchString, '')) / LENGTH(@searchString) AS count
FROM MyTable;