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

[SOLUCIONADO] Consulta con fecha, edad y un if

Estas en el tema de Consulta con fecha, edad y un if en el foro de Mysql en Foros del Web. Buenas a todos!! Tengo un campo de usuarios en los que quiero sacar el nombre del usuario, la edad de este (a través de la ...
  #1 (permalink)  
Antiguo 31/03/2013, 10:02
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Consulta con fecha, edad y un if

Buenas a todos!!

Tengo un campo de usuarios en los que quiero sacar el nombre del usuario, la edad de este (a través de la fecha de nacimiento) y la fecha de nacimiento.

La tabla es:

Código MySQL:
Ver original
  1. Usuarios {id, nombre, fechanacimiento, edad}

El campo Edad la uso por defecto para aquellos usuarios que no introdujeron su fecha de nacimiento en el alta como usuario. Es un entero y es un dato no actualizado para fechas de nacimiento nulas (0000-00-00) pero que recoge la edad de forma automatica sacada de la fecha de nacimiento del usuario. Digamos que es un campos omitible pero que me sirve para otras cosas que no vienen al caso en esta consulta que os hago.

Hago la siguiente consulta:

Código MySQL:
Ver original
  1. SELECT id, nombre,
  2. IFNULL(TIMESTAMPDIFF(YEAR, fechanacimiento, CURRENT_DATE), edad) as edadusu
  3. FROM usuarios
  4. WHERE edad between 20 and 30
  5. ORDER BY edadusu ASC

Y aquí viene mi pregunta......... si al no estar el campo EDAD actualizado, como puedo poner en una consulta WHERE un between que haga un timestampdiff con la fecha de nacimiento. Es decir, sacar en tiempo real a partir de la fecha de nacimiento, los usuarios entre 20 y 30 años, dado que si pongo WHERE edadusu da error de expresión. Sin embargo luego en el ORDER BY si se pone si lo ordena correctamente. Vamos no reconoce en el WHERE el alias edadusu y al poner el TIMESTAMPDIFF en el WHERE también da error de sintaxis.

Espero haberme explicado. Un saludo. Gracias!!

Última edición por yosoloyo; 31/03/2013 a las 10:37
  #2 (permalink)  
Antiguo 31/03/2013, 15:06
 
Fecha de Ingreso: abril-2011
Ubicación: Alicante
Mensajes: 52
Antigüedad: 13 años
Puntos: 3
Respuesta: Consulta con fecha, edad y un if

Intenta hacerlo con subconsultas, te dejo un enlace aquí para que te informes:
http://www.aulaclic.es/sql/t_5_1.htm
  #3 (permalink)  
Antiguo 31/03/2013, 15:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta con fecha, edad y un if

La lógica básica ya la tienes, solo que no lo estás razonando compeltamente.
Si tienes la edad "actualizada", en realidad es medio irrelevante. El campo EDAD jamás será confiable en tu tabla por la simple razón de que deberías realizar un proceso de actualización diario (cosa que es un espanto), o de lo contrario no es dato confiable, y toda información basada en datos no confiables es información basura... Cualquier profesor de sistemas te lo puede decir.
Ahora bien, en tu caso hay dos condiciones que se pueden dar:
- El registro tiene fecha de nacimiento, y puede o no tener edad registrada.
- El registro no tiene fecha de nacimiento, pero sí tiene edad.

En realidad, ambas condiciones son lógicamente interexcluyentes, por lo que no se puede hacer una única consulta medianamente razonable que las incluya. Pero lo que se puede hacer es una consulta tal que devuelva ambas posibilidades:
Código MySQL:
Ver original
  1.     id,
  2.     nombre,
  3.     date_format(fechanacimiento, '%d/%m/%Y') fechanacimiento,
  4.     TIMESTAMPDIFF(YEAR, fechanacimiento, CURRENT_DATE) edadusu
  5. FROM usuarios
  6. WHERE fechanacimiento IS NOT NULL
  7.      AND TIMESTAMPDIFF(YEAR, fechanacimiento, CURRENT_DATE) BETWEEN 20 AND 30
  8.     id,
  9.     nombre,
  10.     fechanacimiento,
  11.     edad
  12. FROM usuarios
  13. WHERE (fechanacimiento IS NULL OR fechanacimiento = '0000-00-00')
  14.      AND edad BETWEEN 20 AND 30
  15. ORDER BY edadusu ASC
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 01/04/2013, 04:09
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Respuesta: Consulta con fecha, edad y un if

Si vamos el campo edad, digamos que fue en la creación de la tabla en su tiempo hace años que ya se "malparío", pero que hay que mantenerlo por razones ajenas al caso para otras relaciones que no tienen nada que ver.

Pues nada muchisimas gracias por tu rapidez como siempre y como siempre yo también por no pararme a pensarlo. Estaba emperrado en poner un alias en un where cuando no se puede...... En fin las cosas de usar las consultas muy de poco en poco, pero cuanto se aprende sin duda!!

!!!Gracias!!!

Etiquetas: campo, edad, fecha, select, 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




La zona horaria es GMT -6. Ahora son las 00:07.