2014-06-24 54 views
1

我想從MySQL數據庫(使用MYSQL工作臺)中的文本(字符串)表中最常見的單詞計數。我通過閱讀另一篇文章(由Kickstart撰寫)獲得了此代碼。 此代碼使用一個單獨的表,稱爲整數,其中包含0到9的10列用於計數。計算SQL表中最常見的詞與排除

主表的表格模式。我主要只對「文本」列中的數據感興趣。

'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個字,但他們完全像一個短的話,則你,我......等 我怎樣才能改變它跳過某些像這樣的詞?
我怎麼能這樣說,只有5個字符和以上的單詞被計算在內?

整數表 'I', 'INT(11)', '否', 'PRI',NULL, ''

原帖和代碼從該柱取出的架構。我是新的,不能發佈任何內容,所以我不得不在這裏問。
determining most used set of words php mysql

非常感謝您的幫助!

+0

你能給我們一個你的表模式的樣本嗎? – ncdreamy

+0

如果您使用表模式更新您的問題,則會更好 – ncdreamy

+0

更新了模式問題。謝謝! – user3769475

回答

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將應用於結果集(後過濾),您應該擁有所需的內容。

+1

謝謝!有效!我如何修改它以僅顯示我選擇的單詞列表的數量?就像我要計算單詞「security」或「ssl」等出現多少次一樣? – user3769475

+0

@ user3769475:不用擔心。您可以取出LENGTH(Sub2.aWord)> = 5並放置類似Sub2.aWord ='ssl'的東西,或者如果多於一個詞Sub2.aWord IN('security','ssl','morestuff')。如果您在那裏離開LENGTH(Sub2.aWord)> = 5,您將看不到ssl,因爲它的長度小於5個字符。 – VBlades

+0

有誰知道我如何修改這個查詢來只計算一定時間範圍內的行中的單詞?我有一個名爲「CreationDate」的列,它是一個DATETIME(不是類似上面的VarChar模式),它具有這種格式2011-01-01 00:46:21。我只想在2011年9月的say中包含行,或者說2011年9月到10月。我知道您可以使用WHERE Year(CreationDate)= 2013例如,但我不知道將它放在查詢中的位置使其工作。謝謝! – user3769475