Deze oplossing lijkt het werk te doen (bijna letterlijk gestolen van deze pagina
). Het vereist een auxiliary
tabel, gevuld met volgnummers van 1 tot ten minste het verwachte aantal verschillende woorden. Dit is heel belangrijk om te controleren of de hulptabel groot genoeg is, anders zullen de resultaten verkeerd zijn (geen fouten).
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;
Deze aanpak is zo inefficiënt als maar kan, omdat het geen enkele index kan gebruiken.
Als alternatief zou ik een statistiektabel gebruiken die ik up-to-date zou houden met triggers. Initialiseer misschien de statistiekentabel met het bovenstaande.