Zdá se, že toto řešení dělá svou práci (ukradeno téměř doslovně z této stránky
). Vyžaduje to auxiliary
tabulka, vyplněná pořadovými čísly od 1 do alespoň očekávaného počtu odlišných slov. To je docela důležité pro kontrolu, zda je pomocná tabulka dostatečně velká, jinak budou výsledky chybné (nezobrazí žádnou chybu).
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;
Tento přístup je tak neefektivní, jak jen může být, protože nemůže používat žádný index.
Jako alternativu bych použil statistickou tabulku, kterou bych průběžně aktualizoval o spouštěče. Možná inicializujte tabulku statistik pomocí výše uvedeného.