按字段内出现的频率排序

时间:2013-06-26 22:16:03

标签: mysql

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

我希望它根据Bob在每个值中显示的次数进行排序,因此我希望3,2,4,1作为响应,因为Bob最常出现在3中,最少出现在1中。

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

如何计算frequency_score?

1 个答案:

答案 0 :(得分: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