сначала поставьте себе блок configurable reports и попрактикуйтесь с запросами в нём.
Вы выбрали в запросе по курсам все курсы, а не только те, которые относятся к конкретной категории.
Суд по куску вашего кода вам нужно вообще с алгоритмами поразбираться, раз у вас команда на выборку курсов из категории находится снаружи цикла по категориям, а должна быть внутри.
Изучайте sql команду where.
В moodle правильнее выбирать данные везде где можно без sql:
$categories = $DB->get_records('course_categories')
$courses = $DB->get_records('courses', array('category' => $category->id));
или $category = $DB->get_record('course_categories', ['id' => $course->category])