Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tenho um GRANDE problema:
Tenho uma tabela de categorias e outra de produtos. As categorias são relacionadas pelo Field pai e eu tenho que buscar as categorias cadastradas nos produtos no Field categorias.
O problema é que essas categorias podem ser, avo, pai, filho ou neto (Hierarquia das categorias) . E o meu supervisor me disse para fazer assim a query:
SELECT
(SELECT avo.pai FROM categorias AS avo WHERE avo.id = (SELECT pai.pai FROM categorias AS pai WHERE pai.id = (SELECT filho.pai FROM categorias AS filho WHERE filho.id = neto.id))) AS ida,
(SELECT avo.categoria_en FROM categorias AS avo WHERE avo.id = (SELECT avo.pai FROM categorias AS avo WHERE avo.id = (SELECT pai.pai FROM categorias AS pai WHERE pai.id = (SELECT filho.pai FROM categorias AS filho WHERE filho.id = neto.id)))) AS nna,
(SELECT pai.pai FROM categorias AS pai WHERE pai.id = (SELECT filho.pai FROM categorias AS filho WHERE filho.id = neto.id)) AS idp,
(SELECT pai.categoria_en FROM categorias AS pai WHERE pai.id = (SELECT pai.pai FROM categorias AS pai WHERE pai.id = (SELECT filho.pai FROM categorias AS filho WHERE filho.id = neto.id))) AS nnp,
(SELECT filho.pai FROM categorias AS filho WHERE filho.id = neto.id) AS idf,
(SELECT filho.categoria_en FROM categorias AS filho WHERE filho.id = (SELECT filho.pai FROM categorias AS filho WHERE filho.id = neto.id)) AS nnf,
neto.id AS idn,
neto.categoria_en AS nnn
FROM
categorias AS netoORDER BY nna, nnp, nnf, nnn
Eu acho que essa query é errada, mas eu nomeei cada sub query para que vocês possam entender.
A hierarquia é a seguinte:
Listo todas as categorias, depois seleciono do ultimo para o primeiro de acordo com o pai. Se eu quero pegar o id do avo, faço um select onde pega o id da categoria que o pai dela é igual ao id onde o pai é igual ao id e o pai é igual ao id da categoria neto.
Conseguem entender o tamanho da buxa ? E ainda por cima tenho que comparar os ids das categorias de produtos onte pode ter avo, pai, filho e neto e tambem fazer um count dessas categorias. Resumindo... ESTOU LASCADO. Alguem conseguiu entender e pode me ajudar ?
Um amigo me ajudou e eu refiz a query:
SELECT
avo.id AS ida,
avo.categoria_en AS nna,
pai.id AS idp,
pai.categoria_en AS nnp,
filho.id AS idf,
filho.categoria_en AS nnf,
neto.id AS idn,
neto.categoria_en AS nnn
FROM
categorias AS avo
LEFT JOIN categorias AS pai ON avo.id = pai.pai
LEFT JOIN categorias AS filho ON pai.id = filho.pai
LEFT JOIN categorias AS neto ON filho.id = neto.pai
WHERE
avo.pai = '0'
ORDER BY nna, nnp, nnf, nnn
Me trouxe certo e agora eu preciso relacionar as categorias dos produtos e fazer um count, que pode conter o id do avo, pai, filho, ou neto, exemplo:
102, 55, 20, ou 55, 102, 20, - Pelo menos o padrão das categorias é o id da categoria com um espaço e uma virgula. (id ,).
Alguem sabe fazer isso ?
Carregando comentários...