Просто еще одна идея, чуть короче:
set @i = 0;
select *, @i := @i + 1
from post_table
where @i < 10 or date = today
order by date desc;
Не уверен, что это очень эффективно.
Обновление: это быстро!
Я тестировал на таком образце:
create table a(i int primary key, d date not null, index idx(d))
set @i = 0;
insert into a(i, d)
select @i := @i + 1, adddate(curdate(), interval -(@i % 1000) day)
from <100 records> a, <100 records> b, <100 records> c