我试图在MySQL数据库(使用MYSQL工作台)中从一个充满文本(字符串)的表中计算最常用的单词。我通过阅读另一篇文章(由Kickstart编写)获得此代码。 此代码使用一个名为integer的单独表,其中有10列,从0到9,用于计数。
主表的表模式。我主要只对数据感兴趣" Text"列。
'Id', 'int(11)', 'NO', 'PRI', '0', ''
'PostId', 'int(11)', 'YES', 'MUL', NULL, ''
'Score', 'int(11)', 'YES', 'MUL', NULL, ''
'Text', 'varchar(4000)', 'YES', '', NULL, ''
'CreationDate', 'varchar(25)', 'YES', '', NULL, ''
'UserId', 'int(11)', 'YES', 'MUL', NULL, ''
'UserDisplayName', 'varchar(255)', 'YES', '', NULL, ''
SQL查询:
SELECT aWord, COUNT(*) AS WordOccuranceCount
FROM (SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(concat(Text, ' '), ' ', aCnt), ' ', -1) AS aWord
FROM table
CROSS JOIN (
SELECT a.i+b.i*10+c.i*100 + 1 AS aCnt
FROM integers a, integers b, integers c) Sub1
WHERE (LENGTH(Body) + 1 - LENGTH(REPLACE(Text, ' ', ''))) >= aCnt) Sub2
WHERE Sub2.aWord != ''
GROUP BY aWord
ORDER BY WordOccuranceCount DESC
LIMIT 10
它列出了前10个单词,但它们充满了像a,the,you,me ......这样的简短单词。
如何更改它以跳过某些字样?
如何才能这样说,只计算5个字符以上的单词?
整数表的模式 ' i',' int(11)',' NO',' PRI',NULL,''
从这篇文章中摘取的原始帖子和代码。我是新人,无法发布任何内容,所以我不得不在这里问 determining most used set of words php mysql
非常感谢你的帮助!
答案 0 :(得分:1)
您应该能够在WHERE子句中添加另一个条件:
SELECT aWord, COUNT(*) AS WordOccuranceCount
FROM (SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(concat(Text, ' '), ' ', aCnt), ' ', -1) AS aWord
FROM table
CROSS JOIN (
SELECT a.i+b.i*10+c.i*100 + 1 AS aCnt
FROM integers a, integers b, integers c) Sub1
WHERE (LENGTH(Body) + 1 - LENGTH(REPLACE(Text, ' ', ''))) >= aCnt) Sub2
WHERE Sub2.aWord != '' AND
LENGTH(Sub2.aWord) >= 5
GROUP BY aWord
ORDER BY WordOccuranceCount DESC
LIMIT 10
只需检查aWord的长度是否至少为5个字符,如果是,请将其包含在结果集中。 LIMIT将应用于结果集(后过滤),您应该拥有所需的内容。