Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verwenden von SQL zum Ermitteln der Wortzahlstatistik eines Textfelds

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 ;