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 ;