Estoy tratando de ordenar un conjunto de resultados que da a los 5 usuarios más cercanos ordenados por el próximo cumpleaños. Esto funciona perfectamente hasta que entren los años bisiestos. Por ejemplo:recordatorio de cumpleaños de mysql, año bisiesto
- mayo 15ta - 96 días dejaron
- 15 de mayo - 97 días dejaron
El resultado superior es una luz en 1987 y la inferior es de 1988. u_birth se almacena como aaaa-mm-dd ¿Existe una manera simple de resolver este problema sin tener que volver a escribir la consulta completa?
SELECT u_birth, IF(DAYOFYEAR(u_birth) >= DAYOFYEAR(NOW()),
DAYOFYEAR(u_birth) - DAYOFYEAR(NOW()),
DAYOFYEAR(u_birth) - DAYOFYEAR(NOW()) +
DAYOFYEAR(CONCAT(YEAR(NOW()), '-12-31'))
)
AS distance
FROM (blog_users)
WHERE `s_agehide` = 0
ORDER BY distance ASC
LIMIT 5
Esta consulta se toma y se modificó a partir del manual de MySQL: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#c7489
¡Gracias! Echaré un vistazo, dame un par de minutos para probarlo =) – moodh
@tired: ten en cuenta que he hecho un pequeño cambio para que todas las personas cuyos cumpleaños sean hoy tengan distancia 0, no distancia 365. Cambié un 'AHORA()' a 'FECHA (AHORA())'. –
Funciona como debe; sin embargo, tengo una pregunta de seguimiento: ¿Cómo recupero filas adicionales de la tabla? Intenté las tres selecciones pero no tuve suerte, digamos que también quiero recuperar s_agehide. ¡Gracias por toda la ayuda! – moodh