Реальная проблема здесь не в том, является ли один или другой язык программирования более эффективным.Огромная, огромная разница в производительности обусловлена локальностью данных, а именно тем, что для выполнения запроса к самой базе данных не требуется перемещать все данные назад и вперед по проводам для оценки, в то время как решение PHP делает это.
Для вашего запроса вам нужно написать хранимую процедуру, которая возвращает несколько наборов результатов (для дальнейшего объединения в PHP) или один большой набор результатов (путем объединения в SQL).Я думаю, что это будет выглядеть примерно так:
SELECT S.Title as School_Title, pt.title as Program_type_title, p.title as Program_Title
FROM School S
INNER JOIN ProgramType pt on s.id = pt.school_id
INNER JOIN Program p on pt.id = p.program_type_id
ORDER BY S.Title, pt.title, p.title
Это даст вам большой прямоугольный массив, упорядоченный по каждому заголовку в порядке приоритета.Таким образом, вы можете циклически проходить по строкам, пока не увидите изменение названия школы, или изменения названия типа программы, или что-то еще, и отобразите соответствующие закрывающие теги.