Wenn der Geburtstag im Format Date gespeichert wird kannst du folgendes anwenden.
Tabelle = `geburt`; Feld(Date) = `gebu`;
PHP-Code:
SELECT IF (
month( gebu ) < month( curdate( ) )
OR month( gebu ) = month( curdate( ) )
AND dayofmonth( gebu ) < dayofmonth( curdate( ) ) , date_sub( gebu, INTERVAL( year( gebu ) -1 ) year ) , date_sub( gebu, INTERVAL year( gebu ) year )
) AS tmporder, date_format( gebu, '%d.%m.%Y' ) AS datum
FROM geburt
ORDER BY tmporder LIMIT 5
In der Bedingung (IF) wird geprüft ob der Monat des Geburtstags kleiner ist als der aktuelle Monat oder der Tag kleiner ist als der Aktuelle, wenn der Monat gleich ist. Falls ja wird das Geburtsjahr - 1 vom Geburtsdatum abgezogen und wenn er größer ist, dass komplette Geburtsjahr. Dadurch entsteht solch ein Datum 0001.01.01 oder 0000.12.03. Dieses wird dann im Alias `tmporder` gespeichert und für die Sortierung benutzt.