Foros del Web » Programando para Internet » PHP » Symfony »

[SOLUCIONADO] DQL obtener niños con edad igual a X meses

Estas en el tema de DQL obtener niños con edad igual a X meses en el foro de Symfony en Foros del Web. Hola, este post lo traigo desde Bases de Datos General pero como se trata de DQL pues no es el lugar adecuado para consultar. La ...
  #1 (permalink)  
Antiguo 27/03/2017, 17:43
 
Fecha de Ingreso: octubre-2007
Mensajes: 273
Antigüedad: 16 años, 6 meses
Puntos: 5
DQL obtener niños con edad igual a X meses

Hola, este post lo traigo desde Bases de Datos General pero como se trata de DQL pues no es el lugar adecuado para consultar. La cuestión es que no he dado con el asunto:

Teniendo una tabla (Entidad) niño con una columna (propiedad) fechaNacimiento (DATE), cómo puedo obtener los niños cuya edad esté comprendida en los X meses de nacido hasta la fecha actual. Por ejemplo: 6 meses completos, más los días restantes -1 para cumplir 7.
Ejemplo 6 meses exactos, 6 meses y 12 días; 6 meses y 20 días, 6 meses y 17 días, 6 meses y 25 días, etc. desde la fecha de nacimiento hasta la actual son resultados válidos.
Aun no se cómo conformar la DQL para que me arroje resultados válidos.
Anh, no hago uso de alguna extensión para Doctrine2, simplemente dispongo de CURRENT_DATE, DATE_SUB, DATE_ADD, DATE_DIFF

La idea es crear filtros de edades, almacenando la consulta correspondiente para el operador seleccionado (=, <, >, <=, >=, BETWEEN), pero las consultas de los operadores igual aun no las tengo muy claras. Cuando el usuario seleccione alguno de los filtros previamente creados, se parametrice la consulta asociada en base a la fecha actual.
  #2 (permalink)  
Antiguo 28/03/2017, 07:58
 
Fecha de Ingreso: octubre-2007
Mensajes: 273
Antigüedad: 16 años, 6 meses
Puntos: 5
Respuesta: DQL obtener niños con edad igual a X meses

Bueno, he encontrado la solución, por muy sencilla que parezca me llevó tiempo calcularla,:
digamos que queremos obtener los niños que están en la edad comprenida en los 6 meses. Simplemente calculo en qué fecha caen 7 meses completos y a esta le sumo 1 día, comparando la nueva fecha exacta en la que se cumplen 6 meses exactos hacia atrás a partir de la actual, de esta forma obtendría la fecha de 6 meses más los días antes de cumplirse el séptimo mes:

Código PHP:
$edaDelFiltro 6;
$mesesCompletos=$edaDelFiltro+1;
$dql="SELECT n FROM AppBundle:Ninho n WHERE n.fechaNacimiento BETWEEN DATE_ADD(DATE_SUB(CURRENT_DATE(), :mesesCompletos, 'MONTH'),1,'DAY') AND DATE_SUB(CURRENT_DATE(), :mesFiltro, 'MONTH')";
$query->setParameter('mesesCompletos'$mesesCompletos);
$query->setParameter('mesFiltro'$edaDelFiltro ); 
  #3 (permalink)  
Antiguo 25/04/2017, 14:04
Avatar de marlanga  
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: DQL obtener niños con edad igual a X meses

Yo no ejecutaría funciones de fechas en mysql, que son lentísimas. Yo calcularía el rango de fechas en PHP y \DateTime, que tiene funciones de sobra para hacer operaciones con fechas, y haría un between con ese rango en mysql.
Y para calcular el rango de fechas, pues una es hoy menos 6 meses, y la otra es hoy menos 7 meses.

PD. Mierda, esto lleva muerto 1 mes.

Última edición por marlanga; 25/04/2017 a las 14:10
  #4 (permalink)  
Antiguo 25/04/2017, 14:50
 
Fecha de Ingreso: octubre-2007
Mensajes: 273
Antigüedad: 16 años, 6 meses
Puntos: 5
Respuesta: DQL obtener niños con edad igual a X meses

marlanga, la consulta en sí es un BETWEEN, cuánto le pudiera costar al SGBD hacer un DATE_SUB por ejemplo.

Etiquetas: edad, igual, meses, niños
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 13:58.