如果您可以使用自定义(且难看的)SQL查询,下面是您可能感兴趣的内容。
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(wp_posts.post_title, \' \', words.n), \' \', -1) word, count(SUBSTRING_INDEX(SUBSTRING_INDEX(wp_posts.post_title, \' \', words.n), \' \', -1)) count
FROM (select 1 n union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9 union all select 10) words
INNER JOIN wp_posts on CHAR_LENGTH(wp_posts.post_title) - CHAR_LENGTH(REPLACE(wp_posts.post_title, \' \', \'\')) >= words.n - 1
WHERE wp_posts.post_type != \'revision\' AND wp_posts.post_status = \'publish\'
AND SUBSTRING_INDEX(SUBSTRING_INDEX(wp_posts.post_title, \' \', words.n), \' \', -1) NOT IN (\'-\', \'&\', \',\', \'.\')
AND LENGTH(SUBSTRING_INDEX(SUBSTRING_INDEX(wp_posts.post_title, \' \', words.n), \' \', -1)) > 3
GROUP BY word
ORDER BY count DESC, word ASC;
说明:
此查询获取所有post_title
从表中提取并将其拆分为单词,以便我们可以对其进行分组和单独计数。
当文章不是修订并已发布时,它会过滤行。它还可以从结果中排除一些单词(使用NOT IN
第条)。它还可以排除小词(使用LENGTH > 3
第条)。
注意:如果您的标题超过10个单词,则不会正确计算。您必须调整select 1 n union all...
行以计算更多单词。
该问题广泛改编自以下回答:https://stackoverflow.com/a/17942691/2342137
PS:如果有人想重写SQL,如果可以重用word
列,而不是执行SUBSTRING_INDEX
好几次,那就太好了。