Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Rellenar matriz de meses

Estas en el tema de Rellenar matriz de meses en el foro de PHP en Foros del Web. Buenas! Estoy intentado rellenar una matriz de meses de registros de usuarios. Es un problema con el que me he encontrado antes y he solucionado ...
  #1 (permalink)  
Antiguo 09/02/2016, 05:54
 
Fecha de Ingreso: febrero-2016
Mensajes: 2
Antigüedad: 8 años, 2 meses
Puntos: 0
Rellenar matriz de meses

Buenas!
Estoy intentado rellenar una matriz de meses de registros de usuarios. Es un problema con el que me he encontrado antes y he solucionado con php, pero he necesitado una chorrilera de lineas bastante grande. La consulta MySql en sí es esta:

SELECT COUNT(*) AS recuento_usuarios, DATE_FORMAT(fecha_alta, '%m') AS mes, DATE_FORMAT(fecha_alta, '%Y') AS anio
FROM usuarios
WHERE test = 0 AND fecha_alta BETWEEN '2015-09-09' AND '2016-05-20'
GROUP BY DATE_FORMAT(fecha_alta, '%m')
ORDER BY anio, mes ASC;

Y me devuelve:

recuento_usuarios;mes;anio
26;11;2015
7;12;2015
5;01;2016

Lo que necesito es que los meses en lo que no ha habido registros, también salgan en la consulta con recuento_usuarios a 0

A ver si podéis echarme un cable, que es un problema recurrente y tengo ganas de solucionarlo!!

Gracias!!
  #2 (permalink)  
Antiguo 09/02/2016, 11:38
 
Fecha de Ingreso: febrero-2016
Mensajes: 2
Antigüedad: 8 años, 2 meses
Puntos: 0
Respuesta: Rellenar matriz de meses

Visto lo visto he decidido hacerlo con php. Dejo la función por si a alguien le sirve.

Código PHP:
function rellenarArray($fechaIni$fechaFin$datos) {
        
//print_r($datos);
        
$datosIni explode("-"$fechaIni);
        
$datosFin explode("-"$fechaFin);

        
//DATOS INICIO
        
$anoIni $datosIni[0];
        
$mesIni $datosIni[1];
        
$mesIni ltrim($mesIni"0");
        
//DATOS FIN
        
$anoFin $datosFin[0];
        
$mesFin $datosFin[1];
        
$mesFin ltrim($mesFin"0");
        
//RELLENO MESES
        //recorro años
        
$arrayMeses;
        for (
$i $anoIni$i <= $anoFin$i++) {
            
//recorro meses y voy montando un array donde el primer indice es el año y el segundo el mes
            
if ($anoIni == $anoFin) {
                for (
$j $mesIni$j <= $mesFin$j++) {
                    
$arrayMeses[$i][$j] = 0;
                }
            } else if (
$i == $anoIni) {
                for (
$j $mesIni$j <= 12$j++) {
                    
$arrayMeses[$i][$j] = 0;
                }
            } else if (
$i == $anoFin) {
                for (
$j 1$j <= $mesFin$j++) {
                    
$arrayMeses[$i][$j] = 0;
                }
            } else {
                for (
$j 1$j <= 12$j++) {
                    
$arrayMeses[$i][$j] = 0;
                }
            }
        }
        if (
$datos) {
            foreach (
$datos as $i => $v) {
                
$arrayMeses[$v['anio']][ltrim($v['mes'], "0")] = $v['recuento_usuarios'];
            }
        }
        return 
$arrayMeses;
    } 

Etiquetas: mysql
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 14:39.