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

我希望它根据 Bob 在每个值中出现的次数来排序,所以我希望 3,2,4,1 作为 Bob 最常出现在 3 中而最不常见于 1 中的响应。

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

如何计算频率分数?

4

1 回答 1

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
于 2013-06-26T22:25:10.167 回答