2013-06-26 59 views
0

MySQL中有一種方法可以基於單個字段內出現的次數進行排序嗎?按字段內出現頻率排序

看看下面的數據:

id, value 
1, 'Bob' 
2, 'Bob Bob Bob' 
3, 'Bob Bob Bob Bob' 
4, 'Bob Bob' 

如果我查詢:

SELECT id from table where value like '%Bob%' 

結果將是1,2,3,4,因爲它們都含有鮑勃

我希望它基於Bob出現在每個值中的次數,所以我希望3,2,4,1作爲Bob最經常出現在3中並且最不經常出現在1中的響應。

SELECT id from table where value like '%Bob%' order by frequency_score 

如何計算frequency_score?

回答

0

的想法可能是這樣的:

SELECT * 
FROM  yourtable 
WHERE value LIKE '%Bob%' 
ORDER BY LENGTH(value) - LENGTH(REPLACE(value, 'Bob', '')) DESC 

請注意,此查詢將不匹配全字,只有子。如果你需要匹配整個單詞,你可以使用類似這樣的東西:

SELECT * 
FROM  yourtable 
WHERE value REGEXP '[[:<:]]Bob[[:>:]]' 
ORDER BY 
    LENGTH(value) - 
    LENGTH(REPLACE(CONCAT(' ', REPLACE(value, ' ', ' '), ' '), ' Bob ', '')) DESC