2012-08-28 7 views
7

は、単純なクエリを持っています。フィールドmyFieldはテキストフィールドです。mysqlのカウント単語は、SQL構文で

質問:上記のクエリを変更してmyFieldフィールドの合計単語数を取得することは可能ですか?

編集:すべての行で私が意味する、総単語数クエリ内のすべての選択したフィールドの総単語数によって

+------------------------------+-------+ 
| sentence      | Words | 
+------------------------------+-------+ 
| Hello World     |  2 | 
| Hello World     |  2 | 
| Mary had a little lamb  |  5 | 
| Her fleece was white as snow |  6 | 
| Everywhere that mary went |  4 | 
| Umm, sheep followed her  |  4 | 
+------------------------------+-------+ 
+4

質問は非常に混乱しています。小さなデータの例と期待される結果を教えてください。 –

+2

これまでのところ、3つの解釈があります。私は私の場合を休む。 –

+0

@AndriusNaruševičiusなぜそれは混乱ですか?私は列の総単語数を得る方法を求めます。混乱はどこですか? – andrew

答えて

13

@によってthis questionから優れた機能を使用しますあなたの質問にお答えします:

mysql> select * from test; 
+----+------------------------------+ 
| id | sentence      | 
+----+------------------------------+ 
| 0 | Hello World     | 
| 1 | Hello World     | 
| 2 | Mary had a little lamb  | 
| 3 | Her fleece was white as snow | 
| 4 | Everywhere that mary went | 
| 5 | Umm, sheep followed her  | 
+----+------------------------------+ 
6 rows in set (0.00 sec) 

mysql> SELECT sentence, wordcount(sentence) as "Words" from test; 
+------------------------------+-------+ 
| sentence      | Words | 
+------------------------------+-------+ 
| Hello World     |  2 | 
| Hello World     |  2 | 
| Mary had a little lamb  |  5 | 
| Her fleece was white as snow |  6 | 
| Everywhere that mary went |  4 | 
| Umm, sheep followed her  |  4 | 
+------------------------------+-------+ 
6 rows in set (0.02 sec) 

functi作業中に、MySQLで関数の宣言を実行する必要があります。他のクエリを実行するのと同じです:

mysql> DELIMITER $$ 
mysql> CREATE FUNCTION wordcount(str TEXT) 
      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); 
     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 
    $$ 
Query OK, 0 rows affected (0.10 sec) 

mysql> DELIMITER ; 
+2

それから、それはhttp://stackoverflow.com/questions/748276/using-sql-to-determine-word-count-stats-of-a-text-fieldの複製です – Adi

+0

はい、しかしおそらくOPはそうではありません関数をクエリに適用する方法を知っている。 –

+0

あなたが編集権限を持っているとしたら、その答えを編集して、その使用例をコメント内にリンクしておくことができます。多分。 – Adi

関連する問題