Questa soluzione sembra fare il lavoro (rubata quasi alla lettera da questa pagina
). Richiede un auxiliary
tabella, riempita con numeri sequenziali da 1 almeno al numero previsto di parole distinte. Questo è abbastanza importante per verificare che la tabella ausiliaria sia sufficientemente grande, altrimenti i risultati saranno errati (non mostrano errori).
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;
Questo approccio è inefficiente come uno può essere, perché non può utilizzare alcun indice.
In alternativa, userei una tabella delle statistiche che terrei aggiornata con i trigger. Forse inizializza la tabella delle statistiche con quanto sopra.