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?
答案 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