Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Usando SQL para determinar estatísticas de contagem de palavras de um campo de texto


Os recursos de manipulação de texto do MySQL não são bons o suficiente para o que você deseja. Uma função armazenada é uma opção, mas provavelmente será lenta. Sua melhor aposta para processar os dados no MySQL é adicionar um função definida pelo usuário . Se você for construir uma versão mais recente do MySQL, você também pode adicionar um função nativa .

A maneira "correta" é processar os dados fora do banco de dados, pois os bancos de dados são para armazenamento, não para processamento, e qualquer processamento pesado pode sobrecarregar muito o DBMS. Além disso, calcular a contagem de palavras fora do MySQL torna mais fácil alterar a definição do que conta como uma palavra. Que tal armazenar a contagem de palavras no banco de dados e atualizá-la quando um documento for alterado?

Exemplo de função armazenada:
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 ;