2013-06-26 58 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