Възможностите за обработка на текст на MySQL не са достатъчно добри за това, което искате. Съхранената функция е опция, но вероятно ще бъде бавна. Най-добрият ви залог за обработка на данните в MySQL е да добавите дефинирана от потребителя функция . Ако все пак ще създадете по-нова версия на MySQL, можете също да добавите родна функция .
"Правилният" начин е да се обработват данните извън DB, тъй като DBs са за съхранение, а не за обработка и всяка тежка обработка може да натовари твърде голямо натоварване на DBMS. Освен това, изчисляването на броя на думите извън MySQL улеснява промяната на дефиницията на това, което се брои като дума. Какво ще кажете да съхранявате броя на думите в DB и да го актуализирате, когато документ се промени?
Примерна съхранена функция:
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 ;