Тут не много другое.
Есть таблица:
`id` int(10)
`title` varchar(255)
`category_id` int(10)
Если category_id NULL, то это категория.
Если category_id IS NOT NULL, статья
Мне нужно отсортировать статья по title категорий (значение category_id).
Страница разбита на пагинацию, если бы была одна страница то хватило добавлять все что есть из таблицы в массив (Ключ == категория)
Потом запрос в БД на получение списка категорий с сортировкой ORDER BY `title` ASC и из массива показывать на странице статьи.
Но так как разбита на пагинацию, то я бы мог написать так:
1) Запрос в бд WHERE `category_id` IS NULL ORDER BY `title` ASC
Здесь я получу список всех категорий и добавлю их id в массив.
2) $num=0;
foreach(массив as $id)
Здесь будем делать запрос SELECT COUNT(*) FROM `таблица` WHERE `category_id`=$id
Получив значение проверяем если $num+count больше идем дальше, если меньше начинаем выводить статьи с данной категории и с остальных пока не уложимся в лимит на странице.
В категории `category_id`=$id которая была первая, то есть когда условие $num+count было меньше будет (LIMIT N, количество страниц на странице) посчитаем с какой именно статьи выводить, а с остальных доберем оставшиеся и остановим цикл.
Универсального же нет запроса в БД? JOIN какой то, чтоб не изобретать велосипед описанный выше.