Как вывести категории так чтобы они не повторялись?
SELECT DISTINCT `categories` FROM `post`
Попробуйте так.
Если я правильно понял структуру таблицы, то у каждой статьи есть id и категория. Посчитать количество статей по категориям ( как бонус ) и выбрать сами категории без повторов, можно запросом вида:
SELECT count( `id` ) AS `post_count`, `categories` FROM `post` WHERE 1 GROUP BY `categories` ORDER BY `categories`