Могу предложить алтернативный вариант. Если постов много будет получить варнинг, хотя тут он как раз нам не мешает. (GROUP CONCAT не поддерживает LIMIT)
select GROUP_CONCAT(post_id ORDER BY date desc),category_id from tmp GROUP BY category_id;
select GROUP_CONCAT(post_id ORDER BY date),category_id from tmp GROUP BY category_id;
Таким образом можно стянуть даные сразу по всем категорям WHERE category_id IN (1,2,3,4,5). Отрезать нужное количество post_id проще в скрипте, а не в самом SQL (ну или LOCATE, LEFT, etc.)