2012-08-28 8 views
7

Deja para tener una consulta sencilla:MySQL número de palabras en la sintaxis SQL

SELECT myfield 
FROM mytable 
WHERE criteria 

La consulta anterior nos da 10 filas de resultados, por ejemplo. El campo myField es un campo de texto.

Mi pregunta es esta: ¿es posible alterar la consulta anterior y obtener el recuento total de palabras del campo myField?

Editado: Por número total de palabras me refiero a la cuenta de la palabra total de todos los campos seleccionados en consulta, en todas las filas

Ejemplo

+------------------------------+-------+ 
| 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

La pregunta es muy confusa. Por favor, bríndenos un pequeño ejemplo de datos y el resultado esperado. –

+2

Hasta ahora - 3 interpretaciones diferentes. Yo descanso mi caso. –

+0

@Andrius Naruševičius ¿por qué es confuso? Pido una forma de obtener el recuento total de palabras de una columna. ¿Dónde está la confusión? – andrew

Respuesta

13

uso de la excelente función de this question por @ otis en su consulta:

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) 

Para hacer la función en el trabajo, debe ejecutar la declaración de la función en MySQL. Es como ejecutar cualquier otra consulta:

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

Luego es un duplicado de http://stackoverflow.com/questions/748276/using-sql-to-determine-word-count-stats-of-a-text-field – Adi

+0

Sí, pero quizás OP no lo haga saber cómo aplicar la función a su consulta. –

+0

Dado que tiene privilegios de edición, tal vez podría haber editado esa respuesta para proporcionar un ejemplo de uso y luego vincularlo en un comentario. Tal vez. – Adi

Cuestiones relacionadas