2015-08-06 4 views
2

У меня есть MySQL таблицы «пост»:запрос для подсчета отдельных слов всех значений в столбце

id   Post 
----------------------------- 
1    Post Testing 
2    Post Checking 
3    My First Post 
4    My first Post Check 

Мне нужно подсчитать число различных слов во всех значениях для Post столбца.

Есть ли способ получить следующие результаты, используя один запрос?

post  count 
------------------ 
Post   4 
Testing  1 
checking  1 
My   2 
first  2 
check  1 
+0

вы хотите эту функцию только в MySQL или вы хотите использовать какие-либо на стороне сервера языков, таких как PHP? – Shridhar

+0

Мне нужно использовать в PHP – Shameem

+0

, тогда, пожалуйста, измените вопрос. и ответ, который дает @gordan, кажется, работает и без PHP. – Shridhar

ответ

1

Не в легком смысле. Если вы знаете, максимальное количество слов, то вы можете сделать что-то вроде этого:

select substring_index(substring_index(p.post, ' ', n.n), ' ', -1) as word, 
     count(*) 
from post p join 
    (select 1 as n union all select 2 union all select 3 union all select 4 
    ) n 
    on length(p.post) - length(replace(p.post, ' ', '')) < n.n 
group by word; 

Обратите внимание, что это работает только в том случае, если слова разделены пробелами. Если у вас есть отдельный словарь всех слов, возможно, вы также можете использовать что-то вроде:

select d.word, count(p.id) 
from dictionary d left join 
    posts p 
    on concat(' ', p.post, ' ') like concat(' %', d.word, ' %') 
group by d.word 
Смежные вопросы