Foros del Web » Programando para Internet » PHP »

mostrar rango de edades con php

Estas en el tema de mostrar rango de edades con php en el foro de PHP en Foros del Web. Hola a todos los amantes, aficionados y profesionales del web developer. Me hago presente una vez mas por encontrarme con una laguna mental frente a ...
  #1 (permalink)  
Antiguo 24/07/2013, 14:37
 
Fecha de Ingreso: abril-2011
Mensajes: 49
Antigüedad: 13 años, 7 meses
Puntos: 3
mostrar rango de edades con php

Hola a todos los amantes, aficionados y profesionales del web developer. Me hago presente una vez mas por encontrarme con una laguna mental frente a una resolución de consulta a la base de datos.
El tema es así, necesito mostrar en pantalla el rango de edades de los alumnos inscriptos a los cursos a partir de la fecha de nacimiento. Mi idea es mostrar en una tabla algo así:

|17|18|19|20|21|22|23|24|25a29|30a34|35a39|40a44|4 7a49|50a54| +55 |
| 2 | 5 |10|18|50|20|56|89| 123 | 250 | 350 | 500 | 496 | 890 | 965 |

El problema es que en mi base de datos la tabla "alumnos" tiene el campo "fecha_nacimiento" en VARCHAR, pero tengo una a favor que todos los datos ingresados en el campo de texto fecha_de_nacimiento están en formato dia/mes/año y asi quedaron almacenados en la db. Necesito que me ayuden en hacer la consulta a la db y mostrar en pantalla el dato numérico de los rangos etarios. Todo esto estaría destinado a la composición estadística de los alumnos y cursos de la institución para la cual trabajo bajo dependencia.

Desde ya muchas gracias y quedo a la espera de su ayuda.
  #2 (permalink)  
Antiguo 24/07/2013, 15:24
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 14 años, 3 meses
Puntos: 56
Respuesta: mostrar rango de edades con php

Te recomiendo que mediante php o el lenguaje de programación que mejor domines, conviertas las fechas a un formato Unix y luego a la hora de consultar le pases los rangos de fecha necesarios para hacer busquedas.
No obstante necesito saber que lenguaje de programación utilizas, y que base de datos. Si eres un poco mas puntual a la hora de hacer las preguntas, te podría dar una solución con algún ejemplo.
  #3 (permalink)  
Antiguo 26/07/2013, 06:56
 
Fecha de Ingreso: abril-2011
Mensajes: 49
Antigüedad: 13 años, 7 meses
Puntos: 3
Respuesta: mostrar rango de edades con php

Hola, gracias por la respuesta. El lenguaje que utilizo es php y mi base está en mysql. En la recomendación que me señalas, como convertiría las fechas de nacimiento a formato unix?
  #4 (permalink)  
Antiguo 26/07/2013, 07:33
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 8 meses
Puntos: 292
Respuesta: mostrar rango de edades con php

Cita:
Iniciado por tvzbien Ver Mensaje
Hola, gracias por la respuesta. El lenguaje que utilizo es php y mi base está en mysql. En la recomendación que me señalas, como convertiría las fechas de nacimiento a formato unix?
Ejemplos:
Código PHP:
<?php
date_default_timezone_set
("America/Bogota");

$hoy date("Y-m-d H:i:s");
$otra_fecha '1976-01-10 12:00:00'// mi cumple

echo strtotime($otra_fecha);
Notaras que el echo imprime un numero.... ese numero es la "fecha unix" que es la cantidad de segundos transcurridos desde "el 1 de Enero del 1970 00:00:00 UTC, relativa a la marca de tiempo dada"
__________________
Salu2!
  #5 (permalink)  
Antiguo 26/07/2013, 09:32
 
Fecha de Ingreso: febrero-2013
Mensajes: 65
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: mostrar rango de edades con php

Mediante SQL podrías convertir la fecha de nacimiento a tipo Datetime, una vez hecha utilizaría el comando datediff de sql (Transact, no se como es en mysql) con la fecha de nacimiento y el dia actual... hecho esto tendrías la edad de las personas.. Luego te quedaría analizar los casos, si edad entre X e Y entonces 40 a 50...
Saludos!
  #6 (permalink)  
Antiguo 26/07/2013, 11:39
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 14 años, 3 meses
Puntos: 56
De acuerdo Respuesta: mostrar rango de edades con php

Te e echo una funcion que creo que es lo que necesitas.
Si tienes alguna duda me lo haces saber
Código PHP:
Ver original
  1. <?php
  2. /*********************************************************************************
  3. Desaconsejo el uso de las instrucciones mysql que vienen en php POR SER OBSOLETAS.
  4. Pero te lo e escrito asi para que lo comprendas mejor.
  5. Si las usas ve pensando en controlar un API. Yo te aconsejo Mysqli.
  6.  
  7. Variables de la funcion
  8.  
  9.     $server = servidor mysql
  10.     $user = usuario de mysql
  11.     $password = contraseña del usuario mysql
  12.     $db = nombre de la base de datos
  13.     $tabla = nombre de la tabla que se desean cambiar los datos
  14.     $campo_fecha = nombre del campo que contiene la fecha a cambiar
  15.     $campo_unico = un campo de la tabla que sea unique para que no cambie nada mas que una fila
  16. *********************************************************************************/
  17.  
  18. function actualizar_fecha($server,$user,$password,$db,$tabla,$campo_fecha,$campo_unico){
  19.  
  20.     $link = mysql_connect($server,$user,$password);
  21.     mysql_select_db($db);
  22.     $sql = "SELECT * FROM $tabla";
  23.     while ($query = mysql_fetch_array(mysql_query($sql,$link))){
  24.         $consulta = explode(' ',$query['fecha']);
  25.         $fecha = explode('-',$consulta[0]);
  26.         $hora = explode(':',$consulta[1]);
  27.         //introducimos los datos para generar la consulta
  28.         $unix = gmmktime($hora[0], $hora[1], $hora[2], $fecha[1], $fecha[2], $fecha[0]));
  29.         //Generamos el string de la consulta a MySQL
  30.         $sql = "UPDATE $tabla SET $campo_fecha = '$unix' WHERE $campo_unico ={$query['id']};";
  31.         mysql_query($sql,$link);
  32.     }
  33.     mysql_close($link);
  34. }
  35.  
  36. /********************************************************************************
  37. Este codigo no te dara problemas siempre y cuando la fecha de nacimiento de los usuarios no sea anterior a 1970.
  38. No se los problemas que te daria con fechas anteriores puesto que lo e escrito sobre la marcha.
  39. ********************************************************************************/
  40. ?>
  #7 (permalink)  
Antiguo 26/07/2013, 12:10
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 8 meses
Puntos: 292
Respuesta: mostrar rango de edades con php

Una funcion o actualiza ó conecta a la DB ... es mezclar responsabilidades hacer eso y te puede traer eventualmente problemas.

Cita:
Iniciado por Dalam Ver Mensaje
Te e echo una funcion que creo que es lo que necesitas.
Si tienes alguna duda me lo haces saber
Código PHP:
Ver original
  1. <?php
  2. /*********************************************************************************
  3. Desaconsejo el uso de las instrucciones mysql que vienen en php POR SER OBSOLETAS.
  4. Pero te lo e escrito asi para que lo comprendas mejor.
  5. Si las usas ve pensando en controlar un API. Yo te aconsejo Mysqli.
  6.  
  7. Variables de la funcion
  8.  
  9.     $server = servidor mysql
  10.     $user = usuario de mysql
  11.     $password = contraseña del usuario mysql
  12.     $db = nombre de la base de datos
  13.     $tabla = nombre de la tabla que se desean cambiar los datos
  14.     $campo_fecha = nombre del campo que contiene la fecha a cambiar
  15.     $campo_unico = un campo de la tabla que sea unique para que no cambie nada mas que una fila
  16. *********************************************************************************/
  17.  
  18. function actualizar_fecha($server,$user,$password,$db,$tabla,$campo_fecha,$campo_unico){
  19.  
  20.     $link = mysql_connect($server,$user,$password);
  21.     mysql_select_db($db);
  22.     $sql = "SELECT * FROM $tabla";
  23.     while ($query = mysql_fetch_array(mysql_query($sql,$link))){
  24.         $consulta = explode(' ',$query['fecha']);
  25.         $fecha = explode('-',$consulta[0]);
  26.         $hora = explode(':',$consulta[1]);
  27.         //introducimos los datos para generar la consulta
  28.         $unix = gmmktime($hora[0], $hora[1], $hora[2], $fecha[1], $fecha[2], $fecha[0]));
  29.         //Generamos el string de la consulta a MySQL
  30.         $sql = "UPDATE $tabla SET $campo_fecha = '$unix' WHERE $campo_unico ={$query['id']};";
  31.         mysql_query($sql,$link);
  32.     }
  33.     mysql_close($link);
  34. }
  35.  
  36. /********************************************************************************
  37. Este codigo no te dara problemas siempre y cuando la fecha de nacimiento de los usuarios no sea anterior a 1970.
  38. No se los problemas que te daria con fechas anteriores puesto que lo e escrito sobre la marcha.
  39. ********************************************************************************/
  40. ?>
__________________
Salu2!
  #8 (permalink)  
Antiguo 26/07/2013, 14:08
Avatar de Dalam  
Fecha de Ingreso: septiembre-2010
Mensajes: 409
Antigüedad: 14 años, 3 meses
Puntos: 56
Desacuerdo Respuesta: mostrar rango de edades con php

Italico76
No es por menos preciar tu esperencia, pero esta funcion apenas la utilizara una vez pues luego introducira los datos en formato unix. Y al no saber su comfiguracion lo que e intentado es ponerselo lo mas facil posible. En vez de poner pegas a las respuestas deberias dar tu mismo soluciones.
  #9 (permalink)  
Antiguo 26/07/2013, 15:50
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 8 meses
Puntos: 292
Respuesta: mostrar rango de edades con php

Cita:
Iniciado por Dalam Ver Mensaje
Italico76
No es por menos preciar tu esperencia, pero esta funcion apenas la utilizara una vez pues luego introducira los datos en formato unix. Y al no saber su comfiguracion lo que e intentado es ponerselo lo mas facil posible. En vez de poner pegas a las respuestas deberias dar tu mismo soluciones.
En tal caso no haria falta siquiera encapsular eso en una funcion.... es para usarse una vez y ya.... como sea... yo si valoro trates de ayudar a otros.... trato de dar sugerencias cuando veo algo que creo no del todo correcto.

Mas arriba tambien le di una respuesta al amigo....no tan completa claro
__________________
Salu2!
  #10 (permalink)  
Antiguo 26/07/2013, 16:39
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 8 meses
Puntos: 406
Respuesta: mostrar rango de edades con php

Lo peor que se puede hacer es alterar registros en una base de datos ya creada, al menos si no tienes 100% control sobre quien accesa a dicha información, imagina que esos datos son consultados por otra aplicación o persona, convertir la fecha a unix podría corromper dicho programa o dificultar/anular la lectura por alguna otra persona....

Para tu problema puedes usar la clase DateTime (solo disponible a partir de PHP5) para saber la edad de manera sencilla, otra forma es usar SQL directamente para saber la edad (que en rendimiento puede ser mejor) usando las funciones YEAR() y CURDATE(), para el tema de los rangos solo es cuestión de usar if para saber en que rango esta, te dejo un ejemplo con datetime, pero que es fácil traducir usando SQL para saber la edad...

Código PHP:
Ver original
  1. <?php
  2.  
  3. //función genérica para generar las fechas de manera aleatoria...
  4. function genFecha() {
  5.     $mes = rand(1,12);
  6.     switch($mes) {
  7.         case 1:
  8.         case 3:
  9.         case 5:
  10.         case 7:
  11.         case 8:
  12.         case 10:
  13.         case 12:
  14.             $dia = rand(1,31);
  15.             break;
  16.         case 4:
  17.         case 6:
  18.         case 9:
  19.             $dia = rand(1,30);
  20.             break;
  21.         case 2:
  22.             $dia = rand(1,28);
  23.             break;
  24.     }
  25.     $anio = rand(1950,2000);
  26.  
  27.     if (checkdate($mes, $dia, $anio)) {
  28.         return $anio.'/'.$mes.'/'.$dia;
  29.     }else {
  30.         return genFecha();
  31.     }
  32. }
  33.  
  34. $rangos = array();
  35. $hoy = new DateTime('now');
  36.  
  37. for($i=0; $i<50; $i++) {
  38.     //solo fijate en que formato se entregan (YYYY/MM/DD)
  39.     $fecha = new DateTime(genFecha());
  40.  
  41.     $intervalo = $fecha->diff($hoy);
  42.     $anios = $intervalo->format('%Y');
  43.  
  44.     if ($anios <= 24) {
  45.         $rangos[$anios] += 1;
  46.     }
  47.  
  48.     if ($anios >= 25 && $anios <= 29) {
  49.         $rangos['25a29'] += 1;
  50.     }
  51.  
  52.     if ($anios >= 30 && $anios <= 34) {
  53.         $rangos['30a34'] += 1;
  54.     }
  55.  
  56.     if ($anios >= 35 && $anios <= 39) {
  57.         $rangos['35a39'] += 1;
  58.     }
  59.  
  60.     if ($anios >= 40 && $anios <= 44) {
  61.         $rangos['40a44'] += 1;
  62.     }
  63.  
  64.     if ($anios >= 7 && $anios <= 49) {
  65.         $rangos['7a49'] += 1;
  66.     }
  67. }
  68.  
  69. echo '<pre>';
  70. print_r($rangos);
  71. echo '</pre>';
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Última edición por Nemutagk; 26/07/2013 a las 16:46
  #11 (permalink)  
Antiguo 31/07/2013, 13:30
 
Fecha de Ingreso: abril-2011
Mensajes: 49
Antigüedad: 13 años, 7 meses
Puntos: 3
Respuesta: mostrar rango de edades con php

Estimados después de un tiempo de tantas pruebas me he decidido hacerlo a través de una consulta sql creando una vista. algo como esto:

CREATE VIEW `AlumnosEdades` AS

SELECT apellido_nombre, YEAR( CURDATE() ) - YEAR(date_format( str_to_date(fecha_nacimiento, '%d/%m/%Y' ), '%Y%m%d' ) ) edad FROM alumnos
;

Esto devolvería en teoria un resultado asi:

SELECT * FROM AlumnosEdades;

nombre edad
Jose 25
Pepe 40

Sobre esto realizaría una consulta para sacar los rangos

SELECT COUNT(edad) cantidad FROM AlumnosEdades WHERE edad > 25;

Devuelve los alumnos con mas de 25

luego Uniria para mostrar mas rangos

SELECT COUNT(edad) cantidad FROM AlumnosEdades WHERE edad > 25
UNION ALL
SELECT COUNT(edad) cantidad FROM AlumnosEdades WHERE edad > 25 AND edad < 50 ;

Devuelve los alumnos de mas de 25 y menores a 5

El tema es que no pasé ni la primer consulta sql ya que cuando la ingreso ya sea desde la interfaz de mysql query browser como de phpmyadmin me tira un error 1064 y me dice que algo está equivocado en su sintax cerca de 'VIEW 'AlumnosEdades' AS SELECT apellido_nombre, YEAR( CURDATE()' en la linea 1 y no puedo hacer mas nada. El sistema que estoy modificando esta montado en una pc con linux debian samba 3.0.14 (un poco viejito) y la base esta bajo mysql 3.23.32.

Desde ya muchas gracias por todas sus sugerencia y consejos. He notado que han sido todos muy predispuestos en este hilo.

Etiquetas: rango, tabla
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

SíEste tema le ha gustado a 1 personas




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