Eragon 0 Denunciar post Postado Janeiro 23, 2014 Bom dia, tenho a seguinte estrutura PRODUTO id titulo preco PRODUTO_X_CATEGORIA id id_produto id_categoria CATEGORIA id titulo descricao ativo O problema é que tenho o produto em 2 categorias, porém não quero trazer a descrição da categoria que está ativo='0'. Há produtos que não precisam estar em categorias por isso precisa ser LEFT/RIGHT JOIN Imaginem o produto 1 está na categoria 1 e 2, só que a categoria 1 está inativa, mas no select o título resgatado ainda é da categoria 1 mesmo com ela desativada. veja o select SELECT A.*, C.titulo as titulo_categoria FROM produtos A LEFT JOIN produto_x_categorias B ON A.id = B.id_produto LEFT JOIN categorias C ON (C.ativo ='1' AND C.id = B.id_categoria) WHERE A.id='1' GROUP BY A.id LIMIT 1 Creio que o problema é no LEFT JOIN produto_x_categorias B ON A.id = B.id_produto pois ele pega mesmo sem a categorias estar ativa Podem me ajudar? grato. Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Janeiro 23, 2014 Tente fazer um outer join em CATEGORIA, teste o ATIVO com COALESCE and COALESCE(CATEGORIA.ATIVO,1) = 1 Compartilhar este post Link para o post Compartilhar em outros sites
paulojuchem 20 Denunciar post Postado Janeiro 25, 2014 qual a utilidade pratica disso? como voce quer retornar um produto com 2 categorias ativas? em duas linhas com o produto duplicado? Compartilhar este post Link para o post Compartilhar em outros sites
Eragon 0 Denunciar post Postado Janeiro 26, 2014 PAULO: Na verdade eu não quero retornar duas linhas, quero retornar o produto com a categoria ativa. Está retornando com categoria inativa também, ou seja, antes do left join do ativo ele seleciona a categoria do produto. O filtro ativo é aplicado no left join seguinte. MOTTA: Obrigado, vou testar Testei com INNER JOIN, porém aí no caso os produtos sem categoria não retornam. Resolvi temporariamente da seguinte forma, porém sei que não é o mais correto. Dessa forma ele só joga para o segundo LEFT as categorias ativas. AND B.id_campanha IN (SELECT id FROM campanhas SELECT A.*, C.titulo as titulo_categoria FROM produtos A LEFT JOIN produto_x_categorias B ON (A.id = B.id_produto AND B.id_categoria IN ( SELECT id FROM categorias WHERE ativo='1')) LEFT JOIN categorias C ON (C.ativo ='1' AND C.id = B.id_categoria) WHERE A.id='1' GROUP BY A.id LIMIT 1 Compartilhar este post Link para o post Compartilhar em outros sites