2014-05-17 30 views
1

我正在尋找一些幫助來計算mysql db的多行中出現的次數。目的是爲了搜索像google這樣的搜索引擎,但只有我的網站如何計算mysql db的多行中出現的單詞

的方案是,以顯示其在最高層

EG的數量最多的詞出現次數的進入。用戶搜索詞key.the記錄進行搜索和數據在出現次數的多少的順序顯示

1.this is a key which is a test key and also the profile key (3 occurences) 
2.key give me a key (2 occurences) 
....and so on... 

這是最好的方法?

SELECT (LENGTH(daya) - LENGTH(REPLACE(data, 'key', '')))/LENGTH('key') AS `count` ORDER BY `count` DESC // data is the column name and key is the word 

或者是有一個更好的

注:我不想使用Like % %。我也想顯示這個詞出現的次數如此the word key has occured 3 times。我可以使用count()

回答

1

您可以將計數添加到ORDER BY子句中。

試試這個方法:

SELECT *,(LENGTH(data) - LENGTH(REPLACE(data, 'key', '')))/LENGTH('key') as cnt 
FROM TableName 
ORDER BY ((LENGTH(data) - LENGTH(REPLACE(data, 'key', '')))/LENGTH('key')) DESC 

要獲得的2個出現次數的記錄,你可以使用HAVING條款:

SELECT *,(LENGTH(data) - LENGTH(REPLACE(data, 'key', '')))/LENGTH('key') as cnt 
FROM TableName 
HAVING cnt=2 
ORDER BY ((LENGTH(data) - LENGTH(REPLACE(data, 'key', '')))/LENGTH('key')) DESC 
+0

以及如何計算它顯示'鍵出現2次' –

+0

@ Mr.coder:更新了我的答案。 –

+0

沒有我的意思是我可以使用'count()'顯示密鑰已使用2次? –

0

你的做法是好的,但你可以通過使用與分裂免除一個字符或多或少:

SELECT (LENGTH(REPLACE(data, 'key', 'key1')) - LENGTH(data)) as `count` 
FROM table t 
ORDER BY `count` DESC // data is the column name and key is the word 

如果您希望值顯示爲「n」次,則使用可以使用having子句中的MySQL:

SELECT (LENGTH(REPLACE(data, 'key', 'key1')) - LENGTH(data)) as `count` 
FROM table t 
HAVING `count` = 2 
ORDER BY `count` DESC // data is the column name and key is the word 

此使用having子句是一個MySQL擴展,並不會在其他數據庫。

相關問題