А $res ни о чем не говорит? )
У вас фиксированный уровень вложенности, причем каждое вложение, это отдельная таблица. Проще получить все раздельными запросами:
$level1 = SELECT * FROM category WHERE EXISTS (SELECT * FROM sub_category WHERE sub_category.category_id = category.id) ORDER BY id
$level2 = SELECT * FROM sub_category WHERE category_id IN (implode(',', array_column($level1, 'id'))) AND EXISTS (SELECT * FROM page WHERE page.sub_category_id = sub_category.id) ORDER BY sub_category_id
И из последней как и для второй по набору id из второй и непустых значений. Проходом в цикле первого уровня, получая данные из остальных уровней уровней построить список.
Это же самое можно сделать и с результатом одного запроса, если его правильно отсортировать на выходе.
Уже давно версии MySQL позволяют опускать AS, то есть просто category.id catId. И полезно давать таблицам алиас, чтобы не писать длинные портянки.
Последний раз редактировалось laimas, 21.12.2017 в 02:53.
|