Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Eu pretendo criar uma lista de categorias e subcategorias multi-nível
Obs.: Possibilidade para infinitos níveis de subcategorias (ou pelo menos 3 níveis abaixo - rsrrs)
Tabela:
INSERT INTO categorias (id, nome, id_pai) VALUES
(1, 'Categoria pai', null),
(2, 'Categoria filho', 1),
(3, 'Subcategoria pai', 2),
(4, 'Subcategoria filho', 3),
(5, 'Subcategoria pai 2', 2),
(6, 'Subcategoria pai 3', 2),
(7, 'Subcategoria filho 2', 6);
Tentei:
select id, id_pai as pai, (select nome from categorias where id = pai) as nome_pai, nome
from categorias order by nome_pai, nome
E funciona para categoria e categoria pai, mas se for mais de três níveis aí já não exibe.
E lendo aqui:
Achei bem interessante essa:
SELECT f.id, f.nome, p.nome AS nome_filho, p.pid
FROM categoria f
LEFT JOIN categoria p
ON f.id = p.pid
Mas gostaria de fazer uma exibição multi-nível de categorias, independente de quantas forem as subcategorias, exemplo:
>
Categoria pai
-- Categoria filho
---- Subcategoria pai
------ Subcategoria filho
---- Subcategoria pai 2
---- Subcategoria pai 3
------ Subcategoria filho 2
Alguém pode me ajudar a fazer isso? Pensei, em último caso, se não for possível fazer de maneira otimizada, em criar diversos while (while dentro de while), chamando uma mesma função. Mas acho que é possível fazer com um único while tudo isso.
Como será que o Wordpress faz para exibir a lista de categorias e subcategorias multi-nível? Tentei até aproveitar as classes deles, mas me perdi muito nos arquivos.
Opa! Matias, muito obrigado mesmo. Excelente as duas soluções, funcionaram perfeitamente era isso mesmo que eu precisava. Já usei esse sistema de organização de categorias e menus em outros projetos, mas ainda não tinha uma solução bem feita como essa, agora sim, está perfeito mesmo, super fácil de utilizar e implementar.
Parabéns a você e ao João Batista também. Ótimos profissionais e com certeza é algo que ajuda muitas pessoas, visto que é comum utilizar esse tipo de organização de categorias.
Valeu,
Lúcio Gomes
>
Aqui tem duas soluções. Uma utilizando Orientação a Objetos, com o padrão Composite (do João Batista Neto) e a outra procedural mesmo (feita por mim).
Carlos Eduardo
Aqui tem duas soluções. Uma utilizando Orientação a Objetos, com o padrão Composite (do João Batista Neto) e a outra procedural mesmo (feita por mim).
Carlos Eduardo