我有一个mysql表“post”:
alt!
我需要计算id Post
-----------------------------
1 Post Testing
2 Post Checking
3 My First Post
4 My first Post Check
列的所有值中不同字词的数量。
有没有办法使用单个查询获得以下结果?
Post
答案 0 :(得分: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
答案 1 :(得分:0)
首先将FULLTEXT索引添加到您的列中,例如:
CREATE FULLTEXT INDEX ft_post
ON post(Post);
然后使用优化表将索引刷新到磁盘:
SET GLOBAL innodb_optimize_fulltext_only=ON;
OPTIMIZE TABLE post;
SET GLOBAL innodb_optimize_fulltext_only=OFF;
设置辅助表:
SET GLOBAL innodb_ft_aux_table = '{yourDb}/post';
现在您可以简单地选择单词和单词计数,例如:
SELECT word, doc_count FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE;