SQL вам нужно что-то вроде:
SELECT category_name, COUNT(*) AS total FROM category_table
GROUP BY category_name
Это вернет набор результатов, который имеет одну строку для каждой категории. Каждая строка имеет два столбца: имя категории и общее количество записей с этим именем категории. Тот же метод работает для идентификаторов категорий или любых других ключей, которые вы можете использовать.
Вы бы использовали это так:
$sql = 'SELECT category_name, COUNT(*) AS total FROM category_table '.
'GROUP BY category_name';
$db = new PDO($database, $user, $password);
$results = $db->query($sql)->fetchAll(PDO::FETCH_ASSOC);
// $results is now an array with the query results
Редактировать: добавлен пример кода PHP.