Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Esta Consulta pero para los 12 meses

Estas en el tema de Esta Consulta pero para los 12 meses en el foro de Mysql en Foros del Web. Buenas, quisiera ver a ver si me pueden ayudar, he descubierto este post en el que hacen unas gráficas a partir de datos de mysql ...
  #1 (permalink)  
Antiguo 01/08/2013, 10:31
 
Fecha de Ingreso: marzo-2013
Ubicación: Jaén, Andalucía
Mensajes: 129
Antigüedad: 11 años
Puntos: 2
Esta Consulta pero para los 12 meses

Buenas, quisiera ver a ver si me pueden ayudar, he descubierto este post en el que hacen unas gráficas a partir de datos de mysql :) http://easy-codigo.blogspot.com.es/2...h-y-mysql.html y bueno, aquí me ha dado la curiosidad para hacer un recuento mensual de unos datos que voy insertando y que se muestren, mi código, por ejemplo para el més de agosto sería así:

Código SQL:
Ver original
  1. SELECT COUNT(*) AS TotalAgosto FROM datos
  2. WHERE `FechaIni`>="2013-08-01" AND `FechaFin` <="2013-08-31"
, habría alguna manera de que en una consulta me devuelva los 12 valores de un año, para guardarlo en la array y que me los muestre del tirón? :)
  #2 (permalink)  
Antiguo 01/08/2013, 11:45
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Esta Consulta pero para los 12 meses

Hola kobety:

Antes que nada, dale un vistazo a todas las funciones para el manejo de fechas con las que cuenta MySQL:

http://dev.mysql.com/doc/refman/5.0/...functions.html

De aquí podrás observar que existen funciones para extraer partes de la fecha... en tu caso te interesa AGRUPAR por MES, por lo tanto utilizas la función MONTH... observa este ejemplo:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+------------+
  3. | id   | fecha      |
  4. +------+------------+
  5. |    1 | 2013-08-01 |
  6. |    2 | 2013-08-05 |
  7. |    3 | 2013-08-07 |
  8. |    4 | 2013-09-01 |
  9. |    5 | 2013-09-14 |
  10. |    6 | 2013-09-22 |
  11. |    7 | 2013-10-17 |
  12. |    8 | 2013-10-19 |
  13. |    9 | 2012-08-01 |
  14. |   10 | 2012-08-02 |
  15. +------+------------+
  16. 10 rows in set (0.00 sec)
  17.  
  18. mysql> SELECT YEAR(fecha) anio, MONTH(fecha) mes, COUNT(*) AS Total
  19.     -> FROM tabla
  20.     -> GROUP BY YEAR(fecha), MONTH(fecha);
  21. +------+------+-------+
  22. | anio | mes  | Total |
  23. +------+------+-------+
  24. | 2012 |    8 |     2 |
  25. | 2013 |    8 |     3 |
  26. | 2013 |    9 |     3 |
  27. | 2013 |   10 |     2 |
  28. +------+------+-------+
  29. 4 rows in set (0.00 sec)emplo:

Observa que en los datos de ejemplo tengo información que corresponde a más de un año... puedes si necesitas la información sólo para un año en específico lo único que tienes que agregar es una condición en el WHERE para filtrar la información.

Si necesitas el NOMBRE del mes en lugar del valor numérico, entonces si leíste la primer liga que te puse te habrás dado cuenta que existe una función que lo hace, o puedes implementar un CASE-WHEN si es que quieres los nombres en español.

dale un vistazo y espero que te sirva la información.

Saludos
Leo.
  #3 (permalink)  
Antiguo 01/08/2013, 11:58
 
Fecha de Ingreso: marzo-2013
Ubicación: Jaén, Andalucía
Mensajes: 129
Antigüedad: 11 años
Puntos: 2
Respuesta: Esta Consulta pero para los 12 meses

Muchas Gracias por responder! al final lo solucioné con un bucle for con php :D , ya que al final es como se va a mostrar :P pongo el código aquí! por si le interesa a alguien
Código MySQL:
Ver original
  1. SELECT COUNT( * ) AS Total
  2. FROM datos
  3. WHERE  `FechaIni` >=  '$anio-$i-01'
  4. AND  `FechaFin` <=  '$anio-$i-31'
  5. AND  `Estado` !=  'Anulado';

Cita:
Editado: Código de programación no permitido en Foros de Bases de Datos.
lo que no se como hacer es para que muestre 2 objetos a la vez....eso lo preguntaré en el subforo de php, Gracias de Nuevo!

Última edición por gnzsoloyo; 01/08/2013 a las 12:49 Razón: Leer normas del foro de BBDD.
  #4 (permalink)  
Antiguo 01/08/2013, 12:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Esta Consulta pero para los 12 meses

No es eficiente hacer N llamadas a la base, cuando puedes obtener todo en una sola consulta.
cada llamada implica transferencia de datos y muchos hosting te ponen cuotas de queries/hora, por lo cual es mejor evitar ese tipo de acciones.
Te recomiendo que sigas la sugerencia de Leo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: insert, meses, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:37.