Løsning uden brug af UNION/CASE
SELECT * FROM posts
ORDER BY
DATE(published_at)=DATE(NOW()) DESC,
DATE(published_at)<DATE(NOW()) DESC,
DATE(published_at)>DATE(NOW()) ASC`
tjek om dette virker. Det fungerer fint med stimulerede data. Du kan ændre desc til asc i henhold til dit sorteringskrav for tidligere og fremtidige datoer