У меня есть запрос MySQL, который в настоящее время захватывает все категории и их подкатегории из таблицы с тремя столбцами. Каждая строка в таблице содержит catid, категорию и parentid (ноль, если родителя нет).
SELECT t1.category AS lev1,
t2.category as lev2,
t3.category as lev3,
t4.category as lev4
FROM categories AS t1
LEFT OUTER JOIN categories AS t2 ON t2.parentid = t1.catid
LEFT OUTER JOIN categories AS t3 ON t3.parentid = t2.catid
LEFT OUTER JOIN categories AS t4 ON t4.parentid = t3.catid
WHERE t1.parentid = 0 AND t1.cat_type = 'content'
ORDER BY lev1, lev2, lev3, lev4
Он возвращает мне набор данных следующим образом:
sample cat 1 | sample cat 4
sample cat 1 | sample cat 5
sample cat 1 | sample cat 6
sample cat 2 | sample cat 7
sample cat 2 | sample cat 8
sample cat 3 | sample cat 9 | sample cat 11
sample cat 3 | sample cat 10 | sample cat 12
Проблема в том, что мне нужно, чтобы основные родительские категории отображались так, как будто у них нет детей. Таким образом, возвращаемые данные должны выглядеть так:
sample cat 1 | |
sample cat 1 | sample cat 5 |
sample cat 1 | sample cat 6 |
sample cat 2 | |
sample cat 2 | sample cat 7 |
sample cat 2 | sample cat 8 |
sample cat 3 | |
sample cat 3 | sample cat 9 |
sample cat 3 | sample cat 9 | sample cat 11
sample cat 3 | sample cat 10 |
sample cat 3 | sample cat 10 | sample cat 12
Я изменил запрос, чтобы получить родительских кошек верхнего уровня сами по себе, но очевидно, что это неправильный способ.
SELECT category AS lev1, catid AS lev1catid,
'' as lev2, '' as lev2catid,
'' as lev3, '' as lev3catid FROM categories WHERE parentid = 0 AND cat_type = 'content' UNION ALL
SELECT t1.category AS lev1, t1.catid AS lev1catid,
t2.category as lev2, t2.catid as lev2catid,
t3.category as lev3, t3.catid as lev3catid
FROM cat
egories AS t1
LEFT OUTER JOIN categories AS t2 ON t2.parentid = t1.catid
LEFT OUTER JOIN categories AS t3 ON t3.parentid = t2.catid
WHERE t1.parentid = 0 AND t1.cat_type = 'content'
ORDER BY lev1, lev2, lev3
Любая помощь будет принята с благодарностью.