phpando 0 Denunciar post Postado Agosto 28, 2009 Estou com um problema evidenciado em outro tópico que tinha um texto que não atendia ao propósito dele: Tenho a seguinte Query: /* Esta é a query SELECT */ $Query_Select = "SELECT pdt.id_departamento, pdt.id_departamento_sub, pdt.nome, dpt.nome AS nome_departamento, sdpt.nome AS nome_subdepartamento FROM Produtos pdt , Departamentos dpt , Departamentos_Sub sdpt WHERE pdt.id IN ( 1 , 2, 3, 4, 5 ) AND dpt.id = pdt.id_departamento AND sdpt.id = pdt.id_departamento_sub LIMIT 0,5"; Nela busco todos os produtos selecionados, sem erro. Agora preciso que nesta mesma query seja possível consultar 2 tabelas (Estoque e Vendas), subtraindo ambas para ter o número em estoque de cada produto. Consegui pegar ambos os dados da seguinte forma: /* Esta é a query SELECT */ $Query_Select = "SELECT pdt.id_departamento, pdt.id_departamento_sub, pdt.nome, dpt.nome AS nome_departamento, sdpt.nome AS nome_subdepartamento, (SELECT COALESCE(SUM(quantidade),0) FROM Produtos_Estoque estq WHERE estq.id_produto = pdt.id GROUP BY estq.id_produto) AS total_estoque, (SELECT COALESCE(SUM(qtd),0) FROM Vendas_Produtos vendas WHERE vendas.id_produto = pdt.id GROUP BY vendas.id_produto) AS total_vendas FROM Produtos pdt , Departamentos dpt , Departamentos_Sub sdpt WHERE pdt.id IN ( 1 , 2, 3, 4, 5 ) AND dpt.id = pdt.id_departamento AND sdpt.id = pdt.id_departamento_sub LIMIT 0,5"; Desta forma ao listar os registros eu tenho o ESTOQUE e as VENDAS, mas o objetivo não é este. Preciso listar os produtos de forma que os que não estiverem em estoque fiquem no final da listagem. Tentei utilizar o total_estoque e o total_vendas no ORDER BY, tentei dar JOIN, INNER JOIN com estes sub-selects que calculam os totais mas não consegui de jeito nenhum. Agradeço qualquer ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
phpando 0 Denunciar post Postado Agosto 28, 2009 Pessoal, atualizando. Consegui desenvolver uma forma que retorna o numero em estoque através do JOIN, mas está retornarndo a soma de todos os registros em estoque e não de cada produto individualmente. Aqui a query atualizada: $Query_Select = " SELECT pdt.id AS ID_PRODUTO, pdt.id_departamento, pdt.id_departamento_sub, pdt.nome, pdt.preco_normal, pdt.preco_prom, pdt.imagem_0, pdt.imagem_1, pdt.imagem_2, pdt.imagem_3, pdt.imagem_4, dpt.nome AS nome_departamento, sdpt.nome AS nome_subdepartamento, estoque.qtd_estoque FROM Produtos AS pdt RIGHT JOIN (SELECT id_produto, COALESCE(SUM(quantidade),0) AS qtd_estoque FROM Produtos_Estoque) AS estoque ON estoque.id_produto = pdt.id , Departamentos AS dpt , Departamentos_Sub AS sdpt WHERE pdt.id IN ( 22 , 5 , 2 , 24 , 23 , 26 , 25 ) AND dpt.id = pdt.id_departamento AND sdpt.id = pdt.id_departamento_sub LIMIT 0,7"); Eu tentei colocar um "WHERE id_produto = pdt.id" dentro do JOIN mas retornou que não encontra a coluna. Alguém sabe como fazer? Meio caminho já foi andado, preciso agora saber como dar um JOIN do Total de Vendas e se possível calcular eles dentro da query e gravar em uma coluna para poder ordena-los de forma decrescente. Compartilhar este post Link para o post Compartilhar em outros sites
João Batista Neto 448 Denunciar post Postado Agosto 28, 2009 Amigo, coloque um desc de suas tabelas aqui e alguns dados, fica mais fácil te ajudar. Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Agosto 28, 2009 Tópico Movido PHP http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Mysql Compartilhar este post Link para o post Compartilhar em outros sites
phpando 0 Denunciar post Postado Agosto 28, 2009 As tabelas são as seguintes: Produtos_Estoque - id (PRIMARY KEY) - id_produto - quantidade Produtos_Vendas - id (PRIMARY KEY) - id_produto - quantidade Compartilhar este post Link para o post Compartilhar em outros sites
phpando 0 Denunciar post Postado Agosto 28, 2009 RESOLVIDO! Já estava ficando louco, mas consegui simplificar tudo sem fazer JOINS, bastou aninhar 2 sub-selects e atribuir a um campo o total em estoque de cada produto. Query Funcional /* Query SQL */ $SQL_QUERY = " SELECT pdt.id, pdt.id_departamento, pdt.id_departamento_sub, pdt.nome, pdt.preco_normal, pdt.preco_prom, pdt.imagem_0, pdt.imagem_1, pdt.imagem_2, pdt.imagem_3, pdt.imagem_4, dpt.nome AS nome_departamento, sdpt.nome AS nome_subdepartamento, (COALESCE((SELECT COALESCE(SUM(quantidade),0) FROM Produtos_Estoque estq WHERE estq.id_produto = pdt.id GROUP BY estq.id_produto) - (SELECT COALESCE(SUM(qtd),0) FROM Vendas_Produtos vendas WHERE vendas.id_produto = pdt.id GROUP BY vendas.id_produto), 0)) AS qtd_estoque FROM Produtos pdt , Departamentos dpt , Departamentos_Sub sdpt WHERE pdt.id IN ( 1,2,3,4,5 ) AND dpt.id = pdt.id_departamento AND sdpt.id = pdt.id_departamento_sub"; Compartilhar este post Link para o post Compartilhar em outros sites