Sto provando a selezionare un set di risultati che fornisca i 5 utenti più vicini ordinati per compleanno imminente. Questo funziona perfettamente fino a quando gli anni bisestili entrano in gioco. Per esempio:mysql promemoria di compleanno, anno bisestile
- 15 maggio - 96 giorni per
- 15 maggio - 97 giorni per
Il buon risultato è una nascita al 1987 e la più bassa viene dal 1988. u_birth viene memorizzato come aaaa-mm-gg. C'è un modo semplice per ordinare questo problema senza dover riscrivere l'intera query?
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
Questa interrogazione è preso e modificato dal manuale di MySQL: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#c7489
Grazie! Avrò un'occhiata, dammi un paio di minuti per provarlo =) – moodh
@tired: Nota che ho apportato una piccola modifica in modo che tutte le persone i cui compleanni siano oggi abbiano la distanza 0, non la distanza 365. Ho cambiato un 'NOW()' a 'DATE (NOW())'. –
Funziona come dovrebbe, tuttavia ho una domanda successiva: Come posso recuperare righe aggiuntive dalla tabella? Ho provato in tutte e tre le selezioni ma senza fortuna, diciamo che voglio recuperare anche s_agehide. Grazie per tutto l'aiuto! – moodh