Wydaje się, że to rozwiązanie wykonuje swoje zadanie (skradzione prawie dosłownie z tej strony
). Wymaga auxiliary
tabeli, wypełnionej kolejnymi numerami od 1 do co najmniej oczekiwanej liczby odrębnych słów. Jest to bardzo ważne, aby sprawdzić, czy tabela pomocnicza jest wystarczająco duża, w przeciwnym razie wyniki będą nieprawidłowe (nie wykazując błędu).
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;
To podejście jest tak nieefektywne, jak to tylko możliwe, ponieważ nie może używać żadnego indeksu.
Jako alternatywę użyję tabeli statystyk, którą będę na bieżąco z wyzwalaczami. Być może zainicjuj tabelę statystyk powyższym.