Mysql
 sql >> Base de données >  >> RDS >> Mysql

Utilisation de SQL pour déterminer les statistiques de nombre de mots d'un champ de texte

Les capacités de traitement de texte de MySQL ne sont pas assez bonnes pour ce que vous voulez. Une fonction stockée est une option, mais sera probablement lente. Votre meilleur pari pour traiter les données dans MySQL est d'ajouter un fonction définie par l'utilisateur . Si vous comptez de toute façon créer une version plus récente de MySQL, vous pouvez également ajouter un fonction native .

La méthode "correcte" consiste à traiter les données en dehors de la base de données, car les bases de données sont destinées au stockage et non au traitement, et tout traitement lourd peut imposer une charge trop importante au SGBD. De plus, le calcul du nombre de mots en dehors de MySQL facilite la modification de la définition de ce qui compte comme un mot. Que diriez-vous de stocker le nombre de mots dans la base de données et de le mettre à jour lorsqu'un document est modifié ?

Exemple de fonction stockée :

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 ;