MathBR 0 Denunciar post Postado Agosto 10, 2007 Olá galera quero a ajuda de vcs num SELECT que eu estou fazendo no qual envolve 3 tabelas: tb_itens_fund (Tabela de Intes Fundidos onde eu irei pegar a descrição do item e linkar o código) tb_itens_fund.desc_fund tb_itens_fund.cod_fund tb_est_fund (Tabela do estoque de itens fundidos onde se houver no estoque aparece a quantidade correspodente na frente da descrição do item, linkado pelo código) tb_est_fund.cod_item tb_est_fund.kg tb_est_fund.pcs tb_transf (Tabela onde são gravadas as transferências de peças entre os setores, linkado pelo codigo porém so exibir o que ainda esta pendente(status=1) e o que for para o estoque de intes fundidos (destino='fundicao')) tb_transf.cod_transf tb_transf.qtde_kg tb_transf.qtde_pcs tb_transf.destino tb_transf.status Isto é o que eu quero exibir: Descrição______________Kg em estoque___Kg em transferencia (Todos os itens da tabela)_(se houver)_____(se houver) o problema é que todas as consultas que eu tenho testado só me retornam alguns itens por exemplo só os itens que contenham o mesmo código nas 3 tabelas, sendo que da tb_itens_fund eu quero exibir todos os itens e se não tiver o mesmo código no estoque e transferencia me retorne NULL mas que exiba sua descrição. como eu tenho testado: SELECT`tb_itens_fund`.`desc_fund`,`tb_transf`.`quant_kg`,`tb_transf`.`quant_uni`,`tb_est_fund`.`kg`,`tb_est_fund`.`unid`,`tb_itens_fund`.`cod_fund`FROM`tb_itens_fund`Left Join `tb_est_fund` ON `tb_est_fund`.`cod_item` = `tb_itens_fund`.`cod_fund`Inner Join `tb_transf` ON `tb_itens_fund`.`cod_fund` = `tb_transf`.`cod_transf`WHERE`tb_transf`.`status` = '1' AND`tb_transf`.`destino` = 'fundicao'; Esta consulta so me retorna os itens que eu tenho em transferencia, ja tentei mudar a posição de seleção das tabelas não sei se isso influencia em algo mas o resultado nunca foi o que eu quis. Como estou fazendo hoje: Para quebrar o galho enquanto não aprendo os JOINS / WHERE / HAVING e etc.. do MySql eu tenho feito assim: Selecione tudo da tabela de itens e se tiver no estoque coloque seu valor ao lado da descrição: SELECT`tb_itens_fund`.`cod_fund`,`tb_itens_fund`.`desc_fund`,`tb_est_fund`.`kg`,`tb_est_fund`.`unid`FROM`tb_itens_fund`Left Join `tb_est_fund` ON `tb_itens_fund`.`cod_fund` = `tb_est_fund`.`cod_item`; Então para verificar se existe na transferência dentro de um looping while eu verifico item por item while($campo=mysql_fetch_array($consulta_acima)){SELECT`tb_transf`.`cod_transf`,`tb_transf`.`quant_kg`,`tb_transf`.`quant_uni`FROM`tb_transf`WHERE`tb_transf`.`destino` = 'fundicao' AND`tb_transf`.`status` = '1'} agora imagina como ta pesado tem +ou- 550 itens cadastrados e no loop elecheca 1 por 1 por isso eu queria aprender uma forma de fazer somente 1 consulta so, e se alguem tiver alguns links de tutoriais de como funciona os JOINS e sobre multi consultas, etc.. vlw Compartilhar este post Link para o post Compartilhar em outros sites
Eclesiastes 2 Denunciar post Postado Agosto 10, 2007 Tente assim: SELECT tb_itens_fund.cod_fund, tb_itens_fund.desc_fund, tb_est_fund.kg, tb_est_fund.unid, tb_transf.quant_kg, tb_transf.quant_uniFROM tb_itens_fund LEFT JOIN tb_est_fund ON tb_itens_fund.cod_fund = tb_est_fund.cod_item LEFT JOIN tb_transf ON tb_transf.cod_transf = tb_itens_fund.cod_fund AND tb_transf.status = 1 AND tb_transf.destino = 'fundicao' Compartilhar este post Link para o post Compartilhar em outros sites
MathBR 0 Denunciar post Postado Agosto 10, 2007 Não rolo cara ele me retornou + de 1 registro da tabela itens_fund onde ela so teria que listar a tabela pra mim e enquanto a alguma informação sobre os JOINS alguem conhece algum site? to querendo entender esses comandos Compartilhar este post Link para o post Compartilhar em outros sites
Eclesiastes 2 Denunciar post Postado Agosto 10, 2007 Não entendi o que você quis dizer. Mas quanto a material: http://www.devmedia.com.br/articles/viewcomp.asp?comp=2507 http://www.devmedia.com.br/articles/viewcomp.asp?comp=2524 Compartilhar este post Link para o post Compartilhar em outros sites
MathBR 0 Denunciar post Postado Agosto 13, 2007 Tipo isto é o que quero exibir: Listar Todos os itens existentes na tabela tb_itens_fund (que são a lista das peças com a descrição), linkar ela a o estoque dessas peças tb_est_fund (porem nem toda peça listada terá no estoque então quero que nesta linha onde ele lista o item + ñ acha no estoque me retorne NULL nos campos da tb_est_fund), e link tb a listagem dos itens com uma tabela de transferencia onde é uma especie de entrada do estoque (tambem não havendo nenhuma transferencia para aquele item naquela linha retorna NULL nos campos da tb_transf) e tudo linkado pelo código do item. Ficaria tipo assim: Item____________- Kg em estoque__-__Unid em estoque___-__Kg em Transferencia - Unid em transferencia Peça 0001________-_____10_______-_______50__________-__________5_________-_________10 Peça 0002________-_____NULL_____-_______NULL________-__________9_________-_________39 (so existe em transferencia) Peça 0003________ -_____95_______-______269__________-________NULL________-_________NULL (so existe em estoque) Peça 0004________-_____NULL______-_______NULL________-________NULL________-_________NULL (nem em transf nem em estoque) o meu problema é que minha consulta SÓ me retorna o que existe TANTO no estoque/transferencia e Listagem dos itens, não me retorna os campos que eu quero em NULL e não exibi a listagem dos itens que não tem no estoque nem em transferencia. ERRO: Eu percebi que estava pensando errado de uma forma: Na tabela transferencia pode haver + de uma transferencia com o mesmo codigo desta forma ele linkava na descrição do item e saia duplicado esta descrição ai eu precebi que somando o resultado da busca na tabela de transferencia ele me retorna exatamente o que eu quero Agora meu problema é que se eu adicionar a cláusula WHERE ou HAVING a consulta não exibi o que eu quero =/ a consulta que dá certo é esta: SELECT tb_itens_fund.cod_fund, tb_itens_fund.desc_fund, tb_est_fund.kg, tb_est_fund.unid, SUM(tb_transf.quant_kg), SUM(tb_transf.quant_uni)FROM tb_itens_fund LEFT JOIN tb_est_fund ON tb_itens_fund.cod_fund = tb_est_fund.cod_item LEFT JOIN tb_transf ON tb_transf.cod_transf = tb_itens_fund.cod_fundGROUP BY tb_itens_fund.cod_fund;e eu preciso adicionar + as cláusulas: WHERE tb_transf.destino = 'fundicao' AND tb_transf.status='1' mas se eu adiciono isto a minha consulta ela para de exibir novamente os campos NULL e só exibi o que acha no estoque transf e listagem de itens Vlw pela ajuda e pelo material ;) Compartilhar este post Link para o post Compartilhar em outros sites
MathBR 0 Denunciar post Postado Agosto 13, 2007 ^^ muiiiiiiiiiito obrigado pela ajuda e pelo material fornecido deu pra ter uma boa noção e postando aki novamente meu problema eu achei a solução, bastava eu substituir o WHERE por AND aqui vai a consulta que me retorna exatamente o que eu preciso: SELECT tb_itens_fund.cod_fund, tb_itens_fund.desc_fund, tb_est_fund.kg, tb_est_fund.unid, SUM( tb_transf.quant_kg ) , SUM( tb_transf.quant_uni ) FROM tb_itens_fundLEFT JOIN tb_est_fund ON tb_itens_fund.cod_fund = tb_est_fund.cod_itemLEFT JOIN tb_transf ON tb_transf.cod_transf = tb_itens_fund.cod_fundAND tb_transf.destino = 'fundicao'AND tb_transf.status = '1'GROUP BY tb_itens_fund.cod_fund; Muito obrigado pela ajuda ;) Cya Compartilhar este post Link para o post Compartilhar em outros sites