Die Textverarbeitungsfähigkeiten von MySQL sind nicht gut genug für das, was Sie wollen. Eine gespeicherte Funktion ist eine Option, wird aber wahrscheinlich langsam sein. Ihre beste Möglichkeit, die Daten in MySQL zu verarbeiten, besteht darin, einen hinzuzufügen benutzerdefinierte Funktion . Wenn Sie sowieso eine neuere Version von MySQL erstellen, können Sie auch ein native Funktion .
Der "richtige" Weg besteht darin, die Daten außerhalb der DB zu verarbeiten, da DBs zur Speicherung und nicht zur Verarbeitung dienen und jede schwere Verarbeitung das DBMS zu stark belasten kann. Darüber hinaus macht es die Berechnung der Wortzahl außerhalb von MySQL einfacher, die Definition dessen, was als Wort zählt, zu ändern. Wie wäre es, wenn die Wortanzahl in der DB gespeichert und aktualisiert wird, wenn ein Dokument geändert wird?
Beispiel gespeicherter 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 ;