2013-06-26 5 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, как все они содержат Боба

Я хочу его в зависимости от того, сколько раз Боб появляется в каждом значении, поэтому мне хотелось бы 3,2,4,1 в качестве ответа, поскольку Боб чаще всего встречается в 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