Diese Lösung scheint zu funktionieren (fast wörtlich von dieser Seite
gestohlen). ). Es erfordert eine auxiliary
Tabelle, gefüllt mit fortlaufenden Nummern von 1 bis mindestens zur erwarteten Anzahl unterschiedlicher Wörter. Dies ist sehr wichtig, um zu überprüfen, ob die Hilfstabelle groß genug ist oder die Ergebnisse falsch sind (keine Fehler anzeigen).
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;
Dieser Ansatz ist äußerst ineffizient, da er keinen Index verwenden kann.
Als Alternative würde ich eine Statistiktabelle verwenden, die ich mit Triggern auf dem Laufenden halten würde. Initialisieren Sie vielleicht die Statistiktabelle mit dem obigen.