Možnosti zpracování textu MySQL nejsou dost dobré pro to, co chcete. Uložená funkce je volitelná, ale pravděpodobně bude pomalá. Nejlepším řešením pro zpracování dat v MySQL je přidat uživatelsky definovaná funkce . Pokud se přesto chystáte vytvořit novější verzi MySQL, můžete také přidat nativní funkce .
„Správným“ způsobem je zpracovávat data mimo DB, protože DB jsou pro ukládání, nikoli pro zpracování, a jakékoli náročné zpracování by mohlo DBMS příliš zatížit. Výpočet počtu slov mimo MySQL navíc usnadňuje změnu definice toho, co se počítá jako slovo. Co takhle uložit počet slov do DB a aktualizovat ho, když se dokument změní?
Příklad uložené funkce:
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 ;