Mysql
 sql >> Database >  >> RDS >> Mysql

Utilizzo di SQL per determinare le statistiche di conteggio delle parole di un campo di testo

Le capacità di gestione del testo di MySQL non sono abbastanza buone per quello che vuoi. Una funzione memorizzata è un'opzione, ma probabilmente sarà lenta. La soluzione migliore per elaborare i dati all'interno di MySQL è aggiungere un funzione definita dall'utente . Se hai comunque intenzione di creare una versione più recente di MySQL, puoi anche aggiungere un funzione nativa .

Il modo "corretto" consiste nell'elaborare i dati al di fuori del DB poiché i DB sono per l'archiviazione, non per l'elaborazione e qualsiasi elaborazione pesante potrebbe sovraccaricare il DBMS. Inoltre, il calcolo del conteggio delle parole al di fuori di MySQL semplifica la modifica della definizione di ciò che conta come una parola. Che ne dici di memorizzare il conteggio delle parole nel DB e aggiornarlo quando un documento viene modificato?

Esempio di funzione memorizzata:

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 ;