Cette solution semble faire le travail (volée presque textuellement de cette page
). Il nécessite un auxiliary
tableau, rempli de nombres séquentiels de 1 au moins au nombre attendu de mots distincts. Ceci est très important pour vérifier que la table auxiliaire est suffisamment grande, sinon les résultats seront erronés (ne montrant aucune erreur).
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;
Cette approche est aussi inefficace que possible, car elle ne peut utiliser aucun index.
Comme alternative, j'utiliserais un tableau de statistiques que je tiendrais à jour avec les déclencheurs. Peut-être initialiser le tableau des statistiques avec ce qui précède.