Ver Mensaje Individual
  #5 (permalink)  
Antiguo 26/04/2011, 11:29
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: lista de cumpleaños con ultimo arriba

Hola tico74:

Comencemos desde el principio, si es posible obtener un ordenamiento como el que mencionas, pero hay algunas cosas que tienes que aclarar.

Primero, en tu post no mencionas qué manejador de BD estás utilizando. Como te movieron desde PHP podría suponer que estás trabajando con MySQL, pero eso sólo tu lo sabes.

Segundo, deberías decirnos cómo almacenas la fecha de cumpleaños en tu tabla. Podría suponer que almacenas la fecha de nacimiento de las personas, pero en qué tipo de dato, date, datetime, varchar, etc.

Tercero, dices que llevas varias horas buscando alguna solución, pero no nos pones nada del código que intentaste hacer, ojo con eso.

La manera en que solucioné este problema es la siguiente.

Supongamos que en tu tabla tienes los siguientes datos:

Código MySQL:
Ver original
  1. mysql> select * from tabla order by nombre;
  2. +-----------+------------+
  3. | nombre    | fecha_nac  |
  4. +-----------+------------+
  5. | antonio   | 1975-03-03 |
  6. | cristian  | 1959-04-25 |
  7. | francisco | 1981-09-08 |
  8. | jose      | 1982-04-28 |
  9. | juan      | 1980-04-26 |
  10. | luis      | 1945-01-01 |
  11. | miguel    | 1978-06-06 |
  12. | pedro     | 1981-04-27 |
  13. +-----------+------------+
  14. 8 rows in set (0.06 sec)

Como podrás suponer fecha_nac almacena la fecha de nacimiento de la persona como un campo DATE. Ahora bien, lo que tengo que hacer es obtener la fecha se su próximo cumpleaños, para este caso NO NOS INTERESA EL AÑO DE NACIMIENTO, SOLO EL MES Y EL DÍA.

Si sustituimos el año de nacimiento por el actual entonces tendríamos algo como esto:

Código MySQL:
Ver original
  1. +-----------+------------+
  2. | nombre    | fecha_cump |
  3. +-----------+------------+
  4. | antonio   | 2011-03-03 |
  5. | cristian  | 2011-04-25 |
  6. | francisco | 2011-09-08 |
  7. | jose      | 2011-04-28 |
  8. | juan      | 2011-04-26 |
  9. | luis      | 2011-01-01 |
  10. | miguel    | 2011-06-06 |
  11. | pedro     | 2011-04-27 |
  12. +-----------+------------+

Ahora bien, Luis, Antonio y Cristian ya cumplieron años en el 2011, por lo que su siguiente cumpleaños es hasta el 2012, por lo tanto con una sentencia IF o CASE, podrías preguntar si la fecha_cump es < que la fecha actual entonces en lugar de agregar 2011, agregar un 2012. Si ordenas por esta nueva fecha_cump te quedaría algo como esto:

Código MySQL:
Ver original
  1. +-----------+------------+
  2. | nombre    | fecha_cump |
  3. +-----------+------------+
  4. | juan      | 2011-04-26 |
  5. | pedro     | 2011-04-27 |
  6. | jose      | 2011-04-28 |
  7. | miguel    | 2011-06-06 |
  8. | francisco | 2011-09-08 |
  9. | luis      | 2012-01-01 |
  10. | antonio   | 2012-03-03 |
  11. | cristian  | 2012-04-25 |
  12. +-----------+------------+

Si observas la persona que cumpe años hoy aparece en primer lugar, y la persona que cumplió años ayer aparece hasta la última posición. Me gustaría que tú mismo intentaras hacer la consulta, si tienes problemas coméntanos que haz intentado hacer, para ayudarte a afinar la consulta en la que estés trabajando.

Saludos
Leo