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

Culculo de edad en meses

Estas en el tema de Culculo de edad en meses en el foro de Mysql en Foros del Web. Estimados: Estoy haciendo un sistema de evaluación del estado nutricional en niños, el tema es que tengo una secuencia en que al ingresar una fecha ...
  #1 (permalink)  
Antiguo 19/01/2009, 20:50
 
Fecha de Ingreso: enero-2009
Mensajes: 3
Antigüedad: 15 años, 3 meses
Puntos: 0
Culculo de edad en meses

Estimados:

Estoy haciendo un sistema de evaluación del estado nutricional en niños, el tema es que tengo una secuencia en que al ingresar una fecha (nacimiento) me calcula la edad en meses a la fecha cumplidos con la siguiente consulta:

$q = $mysqli->query("SELECT * FROM talla_para_la_edad t WHERE t.`edad`=(((YEAR(curdate()) - YEAR('".$_POST['fecha_nacimiento']."'))*12) + (MONTH(curdate()) - MONTH('".$_POST['fecha_nacimiento']."')));");

El problema es que si un niño tiene ya 5 meses y 20 días cumplidos debería considerarlo como un niño de 6 meses y no de 5,

Lo anterior con la finalidad de poder evaluar el peso y la talla actual del niño o niña con las tablas de referencia según la edad en meses.

Alguien me podría ayudar a resover esto?

Agradeciendo de antemano su colaboración

Andrés Acevedo Osorio
Nutricionista
  #2 (permalink)  
Antiguo 20/01/2009, 01:39
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Culculo de edad en meses

Andrés,
Dinos cuál quieres que sea el corte en días para añadir un mes más. ¿Es 20 días? Por otra parte, imagino que el cómputo lo haces por meses de 30 días. Eso es lo que tú estás haciendo y me parece bien, pero confírmanoslo. El método consistiría en restar los días entre las fechas, dividir por 30 y eso contarlo como meses, y si el resto de esa división es 20 o mayor de 20 sumar un mes más. Pero dime si es eso lo que quieres. Eso, por ej., haría que un niño que ha nacido el 1 de febrero no tuviera un año hasta el 2 de marzo... ¿Te vale algo así?

Mira a ver si esta consulta te ofrece los resultados que buscas:
Cita:
select (FLOOR(datediff(curdate(),fecha_nacimiento)/30)+IF((datediff(curdate(),fecha_nacimiento)%30)>= 20,1,0)) meses from talla_para_la_edad

Última edición por jurena; 20/01/2009 a las 02:01
  #3 (permalink)  
Antiguo 20/01/2009, 17:25
 
Fecha de Ingreso: enero-2009
Mensajes: 3
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Culculo de edad en meses

Estimados:

Muchas gracias por el interés en ayudarme, soy Nutricionista y desde hace tiempo vengo haciendo cosas para que mis colegas trabajen mejor (más rápido y mejor) y gratis:

http://www.med.uchile.cl/boletin/200...e/pag24.html#2

Ahora estoy intentando crear una nueva aplicación que ayude en el proceso de evaluar el estado nutricional del los niños.

Al calcular la edad de un niño en meses a partir de la fecha de nacimiento se compara con las tablas de estándares antropométricos por ejemplo un niño de 6 meses debería pesar 7,9 kilos esa es la mediana.
Si el peso está entre la mediana y +1DS o mediana y -1DS el resultado es “Normal”
Si el peso está entre -1DS y –2DS el resultado sería “-1”
Si el peso es menor a -2DS el resultado debe ser “-2”
Si el peso está entre +1DS y +2DS el resultado sería “+1”
Si el peso es mayor a +2DS el resultado debe ser “+2”
Mi código funciona con edades exactas es decir si tiene 6 meses y 10 días ideal porque la norma establece que meses cumplidos + 1 a 10 días es “meses cumplidos”, el problema está cuando el niño tiene meses cumplidos + 11 a 20 días porque eso es “meses y medio” (En este caso 6.5 meses) y si tiene meses cumplidos + 21 o más días es meses cumplidos + un mes.

Tablas para evaluar:
Meses·······-2DS·······-1DS·······N·······+1DS·······+2DS
6·················6,4·········7,1·······7,9······· ·8,8··········9,8

En en phpMyAdmin está así:
Meses·······2negED·······1negED·······N·······1pos ED·······2posED
6··············6,4···················7,1·········7 ,9·········8,8··············9,8

Andrés Acevedo Osorio
Nutricionista

Última edición por GatorV; 21/01/2009 a las 09:40 Razón: Me falto explicar algo
  #4 (permalink)  
Antiguo 21/01/2009, 03:39
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Culculo de edad en meses

Andrés,
con el dato del peso actual y la fecha de nacimiento introducidos en un formulario será fácil sacar con una sola consulta el dato -1, -2, etc. que quieres, tras ver si el peso sobrepasa por exceso o defecto esa media o peso normal, y será una sola consulta. Bastará con hacer un inner join del resultado del número de meses conseguido a partir de la fecha de nacimiento (ahora ya sabemos que a partir del día 11 días hasta 20 más es 0.5 más, y de 21 en adelante 1 mes más) con el mes de la tabla donde tienes los pesos por meses; luego con case... when sacaremos el dato según el rango. Si nos pones la estructura de la tabla y algunos datos (me refiero a la tabla de meses y pesos), podremos hacer alguna prueba. Dinos cómo tienes lo de mes y medio en la tabla, imagino como 6.5 meses, ¿no?
Un detalle más: lo que estás haciendo no te permite guardar un histórico. Para eso deberías tener una tabla de pesadas con fecha de pesada y donde guardarías el dato del peso en ese momento. Restarías a la fecha de nacimiento la fecha de pesada(la del día de la pesada) y guadarías el dato final en otro campo de esa tabla de pesadas. Con eso y el id del niño podrías llevar un control de las fluctuaciones del peso...

EDITO: te pongo la consulta para saber la edad. Te muestro la fecha de nacimiento y los días sobrantes, para que veas lo que hace (luego se quitarán)

Cita:
SELECT fecha_nacimiento, (
MOD(datediff( curdate( ) , fecha_nacimiento ),30)
)dias, (
FLOOR( datediff( curdate( ) , fecha_nacimiento ) /30 )+(
CASE WHEN MOD(datediff( curdate( ) , fecha_nacimiento ),30) >=21
THEN 1
WHEN MOD(datediff( curdate( ) , fecha_nacimiento ),30) <11
THEN 0
ELSE 0.5
END )
)meses
FROM talla_para_la_edad

Última edición por jurena; 21/01/2009 a las 13:46 Razón: cambiar %30 por la función MOD(fecha,30)
  #5 (permalink)  
Antiguo 21/01/2009, 14:33
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Culculo de edad en meses

A ver esta consulta, en la que la tabla meses tiene los campos meses y los que tú dices tener en PHPMyAdmin. Te mostrará todo. Aquí por ejemplo he puesto un peso de 8.23 para comparar con el rango para alguien cualquiera que sea su fecha de nacimiento. Hará el cálculo de meses y cruzará los datos con los de la tabla meses, luego hará los cálculos para ver qué rango cubre y te dará el resultado. Esto es sólo el prototipo de consulta, y sólo para que veas que una única consulta puede darte todo lo que quieres, incluso sin recurrir a PHP.

Cita:
SELECT meses. * , '8.23' REFERENCIA, (

CASE WHEN 8.23
BETWEEN 1negED
AND 1posED
THEN "normal"
WHEN 8.23
BETWEEN 1negED
AND 2negED
THEN "-1"
WHEN 8.23 < 2negED
THEN "-2"
WHEN 8.23
BETWEEN 1posED
AND 2posED
THEN " 1"
WHEN 8.23 > 2posED
THEN " 2"
ELSE "nada"
END
)dato, fecha_nacimiento, (
MOD( datediff( curdate( ) , fecha_nacimiento ) , 30 )
)dias, (
FLOOR( datediff( curdate( ) , fecha_nacimiento ) /30 ) + (
CASE WHEN MOD( datediff( curdate( ) , fecha_nacimiento ) , 30 ) >=21
THEN 1
WHEN MOD( datediff( curdate( ) , fecha_nacimiento ) , 30 ) <11
THEN 0
ELSE 0.5
END )
)meses
FROM talla_para_la_edad
INNER JOIN meses ON ( FLOOR( datediff( curdate( ) , fecha_nacimiento ) /30 ) + (
CASE WHEN MOD( datediff( curdate( ) , fecha_nacimiento ) , 30 ) >=21
THEN 1
WHEN MOD( datediff( curdate( ) , fecha_nacimiento ) , 30 ) <11
THEN 0
ELSE 0.5
END ) ) = meses.meses
  #6 (permalink)  
Antiguo 21/01/2009, 18:14
 
Fecha de Ingreso: enero-2009
Mensajes: 3
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Culculo de edad en meses

Vamos a probar
  #7 (permalink)  
Antiguo 27/01/2009, 04:10
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Culculo de edad en meses

Dejo la consulta final sobre una tabla meses con los datos de referencia. Donde escribo @peso puedes poner cualquier dato numérico o valores traídos desde un formulario. Donde pongo @fechnac, lo mismo, pero debe ser la fecha de nacimiento entrecomillada o una variable (el orden debe ser año/mes/día con 4,2 y 2 dígitos, respectivamente. Todo lo hace MySQL.
Cita:
SELECT 2negED, 1negED, N, 1posED, 2posED, meses, @peso REFERENCIA, (CASE WHEN @peso BETWEEN 1negED AND 1posED THEN "N" WHEN @peso BETWEEN 2negED AND 1negED THEN "(-)1" WHEN @peso < 2negED THEN "(-)2" WHEN @peso BETWEEN 1posED AND 2posED THEN "(+)1" WHEN @peso > 2posED THEN "(+)2" ELSE "error" END)datofinal, '$fnac', (MOD( datediff( curdate( ) , '$fnac' ) , 30 ) )dias, (FLOOR( datediff( curdate( ) , '@fechnac' ) /30 ) + (CASE WHEN MOD( datediff( curdate( ) , '@fechnac' ) , 30 ) >=21 THEN 1 WHEN MOD( datediff( curdate( ) , '@fechnac' ) , 30 ) <11 THEN 0 ELSE 0.5 END ))nummeses FROM meses WHERE (FLOOR( datediff( curdate( ) , '@fechnac' ) /30 ) + (CASE WHEN MOD( datediff( curdate( ) , '@fechnac' ) , 30 ) >=21 THEN 1 WHEN MOD( datediff( curdate( ) , '@fechnac' ) , 30 ) <11 THEN 0 ELSE 0.5 END )) = meses.meses
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 15:59.