Ver Mensaje Individual
  #3 (permalink)  
Antiguo 31/03/2013, 15:26
Avatar de gnzsoloyo
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, 5 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)