sql >> Base de Datos >  >> RDS >> Mysql

Uso de SQL para determinar las estadísticas de recuento de palabras de un campo de texto

Las capacidades de manejo de texto de MySQL no son lo suficientemente buenas para lo que desea. Una función almacenada es una opción, pero probablemente será lenta. Su mejor apuesta para procesar los datos dentro de MySQL es agregar un función definida por el usuario . Si va a compilar una versión más nueva de MySQL de todos modos, también puede agregar un función nativa .

La forma "correcta" es procesar los datos fuera de la base de datos, ya que las bases de datos son para almacenamiento, no para procesamiento, y cualquier procesamiento pesado podría suponer una carga excesiva para el DBMS. Además, calcular el recuento de palabras fuera de MySQL facilita cambiar la definición de lo que cuenta como una palabra. ¿Qué hay de almacenar el recuento de palabras en la base de datos y actualizarlo cuando se cambia un documento?

Ejemplo de función almacenada:

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 ;