Teksthåndteringsmulighederne i MySQL er ikke gode nok til det, du ønsker. En lagret funktion er en mulighed, men vil sandsynligvis være langsom. Dit bedste bud på at behandle dataene i MySQL er at tilføje en brugerdefineret funktion . Hvis du alligevel vil bygge en nyere version af MySQL, kan du også tilføje en native funktion .
Den "korrekte" måde er at behandle data uden for DB'en, da DB'er er til lagring, ikke behandling, og enhver tung behandling kan belaste DBMS'et for meget. Derudover gør beregning af ordantallet uden for MySQL det nemmere at ændre definitionen af, hvad der tæller som et ord. Hvad med at gemme ordantallet i DB'en og opdatere det, når et dokument ændres?
Eksempel på gemt funktion:
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 ;