Ich versuche, eine Ergebnismenge zu sortieren, die die 5 nächsten Benutzer sortiert nach bevorstehenden Geburtstag gibt. Dies funktioniert perfekt, bis Schaltjahre ins Spiel kommen. Zum Beispiel:mysql Geburtstagserinnerung, Schaltjahr
- 15. Mai - 96 Tage nach links
- 15. Mai - 97 Tage links
Das Top-Ergebnis ist eine Geburt im Jahr 1987 und der unteren aus ist 1988 u_birth wird gespeichert als JJJJ-MM-TT. Gibt es eine einfache Möglichkeit, dieses Problem zu sortieren, ohne die gesamte Abfrage neu schreiben zu müssen?
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
Diese Abfrage genommen wird und aus dem MySQL-Handbuch geändert: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#c7489
Danke! Ich sehe nach, gib mir ein paar Minuten, um es auszuprobieren =) – moodh
@tired: Beachten Sie, dass ich eine kleine Änderung vorgenommen habe, so dass alle Menschen, deren Geburtstage heute sind, Abstand 0, nicht Entfernung 365 haben 'NOW()' zu 'DATE (NOW())'. –
Es funktioniert wie es soll, aber ich habe eine Folge Frage: Wie kann ich zusätzliche Zeilen aus der Tabelle abrufen? Ich habe versucht in allen drei Auswahlen aber kein Glück, sagen wir, ich möchte auch s_agehide abrufen. Danke für die Hilfe! – moodh