このソリューションはその役目を果たしているようです(このページ
からほぼ逐語的に盗まれました )。 auxiliary
が必要です テーブル。1から少なくとも予想される個別の単語の数までの連続番号で埋められます。これは、補助テーブルが十分に大きいことを確認するために非常に重要です。そうしないと、結果が間違ってしまいます(エラーは表示されません)。
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(maintable.comment, ' ', auxiliary.id), ' ', -1) AS word,
COUNT(*) AS frequency
FROM maintable
JOIN auxiliary ON
LENGTH(comment)>0 AND SUBSTRING_INDEX(SUBSTRING_INDEX(comment, ' ', auxiliary.id), ' ', -1)
<> SUBSTRING_INDEX(SUBSTRING_INDEX(comment, ' ', auxiliary.id-1), ' ', -1)
GROUP BY word
HAVING word <> ' '
ORDER BY frequency DESC;
このアプローチは、インデックスを使用できないため、可能な限り非効率的です。
別の方法として、トリガーで最新の状態に保つ統計テーブルを使用します。おそらく、上記で統計テーブルを初期化します。