Próbuję uporządkować zestaw wyników, który daje 5 najbliższych użytkowników posortowanych według nadchodzących urodzin. Działa to doskonale, dopóki nie wkroczą lata przestępne. NpPrzypominamy o mysql, rok przestępny
- 15 maja - 96 dni na
- 15 maja - 97 dni na
najlepszy wynik jest poród w 1987 roku, a dolna jest od 1988 roku u_birth jest przechowywana jako rrrr-mm-dd. Czy istnieje prosty sposób na posortowanie tego problemu bez konieczności przepisywania całego zapytania?
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
Zapytanie to jest zrobione i modyfikowany instrukcji mysql: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#c7489
Dzięki! Popatrzę, daj mi kilka minut na wypróbowanie =) – moodh
@tired: Zauważ, że wprowadziłem niewielką zmianę, aby wszystkie osoby, których urodziny są dzisiaj mają odległość 0, a nie odległość 365. Zmieniłem 'NOW()' na 'DATE (NOW())'. –
Działa tak, jak powinien, jednak mam jedno dodatkowe pytanie: Jak mogę pobrać dodatkowe wiersze z tabeli? Próbowałem we wszystkich trzech wybranych, ale bez powodzenia, powiedzmy, że chcę również pobrać s_agehide. Dzięki za pomoc! – moodh