Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Completar la cadena de meses

Estas en el tema de Completar la cadena de meses en el foro de PHP en Foros del Web. Hola amigos, les cuento que necesito mostrar los últimos 12 meses a partir del mes actual, es decir, si estamos en Julio 2017 debería mostrar ...
  #1 (permalink)  
Antiguo 06/07/2017, 20:41
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Venezuela
Mensajes: 122
Antigüedad: 3 años
Puntos: 7
Sonrisa Completar la cadena de meses

Hola amigos, les cuento que necesito mostrar los últimos 12 meses a partir del mes actual, es decir, si estamos en Julio 2017 debería mostrar la siguiente cadena:
Jul2017 - Jun2017 - May2017 - Abr2017 - Mar2017 - Feb2017 - Ene2017 - Dic2016 - Nov2016 - Oct2016 - Sep2016 - Ago2016

Pero al lado de cada mes debo colocar la cantidad de alumnos que se inscribieron en cada mes, para ello tengo la siguiente consulta, cuya salida almaceno en el arreglo $alumnos()
Código:
          SELECT MONTH(fecha_inscripcion) AS mes, YEAR(fecha_inscripcion) AS anyo, COUNT(*) AS total
          FROM tbl_alumnos
          GROUP BY MONTH(fecha_inscripcion), YEAR(fecha_inscripcion)
          ORDER BY YEAR(fecha_inscripcion) ASC, MONTH(fecha_inscripcion) ASC
          LIMIT 12
Ahora cuando ejecuto el siguiente código:
Código PHP:
    foreach ($alumnos as $key => $alumno) {
            echo 
$alumno['mes']." ".$alumno['anyo']."(".$alumno['total'].")";
            echo 
" - ";
    } 
Hasta ahora perfecto, esto me muestra los siguientes valores:

Código:
mes/anyo (total)
6/2016 (31) - 5/2017 (21) - 6/2017 (50) - 7/2017 (44)
Mi gran duda es: cómo hago para incluir los meses que no estan en el arreglo, por ejemplo, el mes de abril: 4/2017(0)

Última edición por julia2021; 06/07/2017 a las 21:30
  #2 (permalink)  
Antiguo 06/07/2017, 23:17
Avatar de Alexis88
Moderador
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.258
Antigüedad: 6 años, 1 mes
Puntos: 873
Respuesta: Completar la cadena de meses

Pienso que te convendría realizar una consulta cruzada (JOIN) partiendo desde la fecha de hace 12 meses hasta la fecha actual, para lo cual puedes utilizar la función DATE_SUB() y así restarle 12 meses a la fecha. Luego, en la misma consulta SQL, solo te quedaría agrupar los valores correspondientes por mes.

__________________
«Laissez faire et laissez passer, le monde va de lui même»
  #3 (permalink)  
Antiguo 07/07/2017, 09:34
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Venezuela
Mensajes: 122
Antigüedad: 3 años
Puntos: 7
Respuesta: Completar la cadena de meses

No se puede hacer como indicas, porque no aparecerian aquellos meses que no existan en la DB, la idea es incluir aquellos meses que no estan en la BD a través de PHP, pero no se como hacerlo
  #4 (permalink)  
Antiguo 07/07/2017, 09:48
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.151
Antigüedad: 2 años, 5 meses
Puntos: 227
Respuesta: Completar la cadena de meses

se me ocurre almacenar los meses en un array e ir comprarando si el mes devuelto esta en el array, lo mostramos si no rellenamos con cero

Código PHP:
Ver original
  1. //Array de Meses
  2. $meses = array(1=>1,2=>2,3=>3,4=>4,5=>5,6=>6,7=>7,8=>8,9=>9,10=>10,11=>11,12=>12);
  3.  
  4. $almacenados = array(5=>30, 7=>15, 10=>45);
  5.  
  6. foreach ($meses as $key => $value) {
  7.     if(array_key_exists($key, $almacenados)){
  8.         echo "<li>".($value)." = ".$almacenados[$key]."</li>";
  9.     }else{
  10.         echo "<li>".($value)." = 0</li>";
  11.     }
  12. }//

esta muestra devuelve esto:

1 = 0
2 = 0
3 = 0
4 = 0
5 = 30
6 = 0
7 = 15
8 = 0
9 = 0
10 = 45
11 = 0
12 = 0

Para crear el array con los ultimos 12 meses lo haria de esta manera:

Código PHP:
Ver original
  1. $mes = date("n");//Mes actual
  2. $meses = array();//Array de meses
  3.  
  4. $con = $mes;//Inicializo el contador
  5. for($i=1; $i<13; $i++){
  6.     array_push($meses, $con);//agrego los meses
  7.     $con = $con-1;//Resto un digito al mes para llevarlo al mes anterior
  8.     if($con==0){
  9.         $con=12;//Reinicio la cuenta a partir del mes 12 al llegar a cero
  10.     }
  11. }

crea esto:

Array ( [0] => 7 [1] => 6 [2] => 5 [3] => 4 [4] => 3 [5] => 2 [6] => 1 [7] => 12 [8] => 11 [9] => 10 [10] => 9, [11] => 8 )

el codigo competo se´ria algo así:

Código PHP:
Ver original
  1. $mes = date("n");//Mes actual
  2. $meses = array();//Array de meses
  3.  
  4. $con = $mes;//Inicializo el contador
  5. for($i=1; $i<13; $i++){
  6.     array_push($meses, $con);//agrego los meses
  7.     $con = $con-1;//Resto un digito al mes para llevarlo al mes anterior
  8.     if($con==0){
  9.         $con=12;//Reinicio la cuenta a partir del mes 12 al llegar a cero
  10.     }
  11. }
  12.  
  13.  
  14. $almacenados = array(5=>30, 7=>15, 10=>45);
  15.  
  16. foreach ($meses as $key => $value) {
  17.     if(array_key_exists($value, $almacenados)){
  18.         echo "<li>".($value)." = ".$almacenados[$value]."</li>";
  19.     }else{
  20.         echo "<li>".($value)." = 0</li>";
  21.     }
  22. }//

y nos da este resultado:

7 = 15
6 = 0
5 = 30
4 = 0
3 = 0
2 = 0
1 = 0
12 = 0
11 = 0
10 = 45
9 = 0
8 = 0
__________________
[email protected]
HITCEL

Última edición por xfxstudios; 07/07/2017 a las 10:04
  #5 (permalink)  
Antiguo 07/07/2017, 10:29
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Venezuela
Mensajes: 122
Antigüedad: 3 años
Puntos: 7
Respuesta: Completar la cadena de meses

A ver, a ver, lo voy a probar y te aviso
  #6 (permalink)  
Antiguo 07/07/2017, 19:20
Avatar de julia2021  
Fecha de Ingreso: diciembre-2014
Ubicación: Venezuela
Mensajes: 122
Antigüedad: 3 años
Puntos: 7
Sonrisa Respuesta: Completar la cadena de meses

Perfecto amigo xfxstudios, le hice muchos cambios para adaptarlo a mi código y me funciono, estaba perdida en la forma de como resolverlo. Mil graccias !!!!!
  #7 (permalink)  
Antiguo 11/07/2017, 13:48
Avatar de Alexis88
Moderador
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.258
Antigüedad: 6 años, 1 mes
Puntos: 873
Respuesta: Completar la cadena de meses

Cita:
Iniciado por julia2021 Ver Mensaje
No se puede hacer como indicas, porque no aparecerian aquellos meses que no existan en la DB, la idea es incluir aquellos meses que no estan en la BD a través de PHP, pero no se como hacerlo
En realidad aparecerían todos, indicándose cero como cantidad de registros en los meses a los que no se haya asociado datos. Es más eficiente hacerlo desde la consulta SQL que desde PHP.
__________________
«Laissez faire et laissez passer, le monde va de lui même»



La zona horaria es GMT -6. Ahora son las 23:49.