Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Prezados, boa noite.
Nunca fiz isso e estou dúvidas.
Tenho as tabelas CATEGORIAS e SUBCATEGORIAS. Os cadastros e relacionamentos estão funcionando perfeitamente, tudo ok aqui.
Tenho também a tabela PRODUTOS.
Digamos que eu tenha produtos que fazem parte de categorias que não tem subcategoria, e tenho produtos que fazem parte de subcategorias de alguma categoria.
Como fazer o relacionamento desses produtos?
Vou relacionar a tabela PRODUTOS com CATEGORIAS e SUBCATEGORIAS ?
A dúvida surgiu pois um produto pode fazer parte de uma categoria que não tem subcategoria, mas posso ter também produtos que fazem parte de subcategorias de uma categoria.
E qual a cardinalidade desse relacionamento?
Ja vi gente fazendo o relacionamento só com SUBCATEGORIA, mas e se não existir subcategoria????
produto many to many categoria
produto many to many subcategoria
produto
id | produto
prod_cat
cat_id | prod_id
categoria
id | categoria
subcategoria
id | categoria
prod_subcat
subcat_id | prod_id
Como resolver isso de um forma correta?
Vamos lá!
Primeiramente, fiz um exemplo meio
que chatinho, a query é bem grande,
porém não deixa de ser funcional...
Sem mais de longas, vamos a ela!
TABELAS+DADOS A SER UTILIZADAS(OS)
('Televisor'), ('Notebook'), ('Televisor Samsung'), ('Notebook Samsung'), ('Televisor LG'), ('Adaptador HMDI'), ('Televisor Gnusmas'), ('Notebook Acer'), (3, 4), (1, 'LG'), (2, 'Samsung'), (1, 'Samsung'), (1, 'Gnusmas'), (1, 3), (3, 1), (2, 2), (4, 5), FROM produto p LEFT JOIN prod_cat cp ON ( p.id = cp.prod_id ) LEFT JOIN prod_subcat ps ON ( p.id = ps.prod_id ) LEFT JOIN subcategoria sc ON ( ps.subcat_id = sc.id ) LEFT JOIN categoria c ON c.id = CASE WHEN cp.cat_id IS NULL THEN sc.cat_id ELSE cp.cat_id END ORDER BY p.id ;RESULTADO
/monthly_2019_07/image.png.f360481e530ba4ec361ef28b9f13900b.png" />
EXPLICAÇÃO
Basicamente o'que fizemos foi obter
todos os produtos, onde "verificamos"
através do LEFT JOIN se o mesmo
está ou não nas tabelas onde contém
os relacionamentos...
Caso não exista em uma tabela, então
atravéz do LEFT JOIN o mesmo será
dado como NULL...