Denne løsning ser ud til at gøre jobbet (stjålet næsten ordret fra denne side
). Det kræver en auxiliary
tabel, fyldt med fortløbende tal fra 1 til mindst det forventede antal distinkte ord. Dette er ret vigtigt at kontrollere, at hjælpetabellen er stor nok, ellers vil resultaterne være forkerte (der ikke viser nogen fejl).
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;
Denne tilgang er så ineffektiv, som man kan være, fordi den ikke kan bruge noget indeks.
Som et alternativ ville jeg bruge en statistiktabel, som jeg ville holde ajour med udløsere. Initialiser måske statistiktabellen med ovenstående.