Las capacidades de manejo de texto de MySQL no son lo suficientemente buenas para lo que desea. Una función almacenada es una opción, pero probablemente será lenta. Su mejor apuesta para procesar los datos dentro de MySQL es agregar un función definida por el usuario . Si va a compilar una versión más nueva de MySQL de todos modos, también puede agregar un función nativa .
La forma "correcta" es procesar los datos fuera de la base de datos, ya que las bases de datos son para almacenamiento, no para procesamiento, y cualquier procesamiento pesado podría suponer una carga excesiva para el DBMS. Además, calcular el recuento de palabras fuera de MySQL facilita cambiar la definición de lo que cuenta como una palabra. ¿Qué hay de almacenar el recuento de palabras en la base de datos y actualizarlo cuando se cambia un documento?
Ejemplo de función almacenada:
DELIMITER $$
CREATE FUNCTION wordcount(str LONGTEXT)
RETURNS INT
DETERMINISTIC
SQL SECURITY INVOKER
NO SQL
BEGIN
DECLARE wordCnt, idx, maxIdx INT DEFAULT 0;
DECLARE currChar, prevChar BOOL DEFAULT 0;
SET maxIdx=char_length(str);
SET idx = 1;
WHILE idx <= maxIdx DO
SET currChar=SUBSTRING(str, idx, 1) RLIKE '[[:alnum:]]';
IF NOT prevChar AND currChar THEN
SET wordCnt=wordCnt+1;
END IF;
SET prevChar=currChar;
SET idx=idx+1;
END WHILE;
RETURN wordCnt;
END
$$
DELIMITER ;