Ir para conteúdo
Fórum Script Brasil
  • 0

PHP - Ajuda com Tabelas INNER JOIN


remazela

Pergunta

Caros amigos

Estou com um problema que não consigo resolver, estou relacionando algumas Tabelas, onde o sistema precisa buscar as seguintes informações:

Cotação ID - Titulo => isso busca

Produto da Cotação => isso busca

Fornecedores que responderam a cotação => isso busca

Resposta dos fornecedores, conforme produto => isso trás tudo errado.

A rotina que escrevi trás desta forma:

3 - Digity Ltda - Cotação n. 3.3 - MATERIAL DE ESCRITÓRIO

Produtos cotados

101 - CADERNO UNIVERSITÁRIO 1-MAT

2 - Fornecedor Alfa.......: 5 - 5,50 - 27,50

3 - Fornecedor Beta......: 5 - 6.00 - 30.00

1 - Fornecedor Omega..: 5 - 7.00 - 35.00

-----

131 - RÉGUA 30CM - ACRÍLICA

2 - Fornecedor Alfa.......: 5 - 5,50 - 27,50

3 - Fornecedor Beta......: 5 - 6.00 - 30.00

1 - Fornecedor Omega..: 5 - 7.00 - 35.00

-----

140 - CANETA BIC - AZUL

2 - Fornecedor Alfa.......: 5 - 5,50 - 27,50

3 - Fornecedor Beta......: 5 - 6.00 - 30.00

1 - Fornecedor Omega..: 5 - 7.00 - 35.00

-----

150 - ESTILETE MÉDIO

2 - Fornecedor Alfa.......: 5 - 5,50 - 27,50

3 - Fornecedor Beta......: 5 - 6.00 - 30.00

1 - Fornecedor Omega..: 5 - 7.00 - 35.00

Como pode observar, o sistema trás fornecedores diferentes, mas infelizmente trás sempre as mesmas QTDE, Vr_UNIT e TOTAL, para as respostas, embora cada produto teve uma quantidade e valor diferente informados.

Abaixo o código fonte que estou usando:


//mostraResposta - trago o Cliente e os dados(cabeçalho) da Cotação
<?php function mostraResposta(){
    include"Connections/config.php";
        $cliente = '3';
        $cotaNum = '3.3';

		$sql = "SELECT cotacao.cotaNumero, cotacao.cotaTitulo, clientes.clienteId, clientes.nome
				FROM clientes 
				INNER JOIN cotacao ON cotacao.cotaNumero = '$cotaNum'
				Where clientes.clienteId = '$cliente' ";


		$stmt = $conecta->prepare($sql);
		$stmt->execute();

		$num = $stmt->rowCount();
		$clie = null;        

		if($num > 0) {

		    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
		           extract($row);

		        if($clie != $clienteId) {

		            if(!is_null($clie)) { echo "</table>"; } 
		            // Fechando a tabela da ultima categoria impressa antes
		            // de abrir a nova
					echo " <br/><br/>";

		            echo "<h1>{$clienteId} - {$nome}</h1>";

		            echo "<table>";
		            echo "  <tr>";
		            echo "      <th>CÓDIGO</th>";		            
		            echo "      <th>NOME</th>";
		            echo "  </tr>";

		            $clie = $clienteId;
                 
		        } //Fecha IF
               
	        
		        echo "  <tr>";
		        echo "      <td><div class='cod-produto'>{$cotaNumero}</div></td>";
		        echo "      <td><div class='nome-produto'>{$cotaTitulo}</div></td>";
		        echo "  </tr>";

		    } //Fecha While

		    echo "</table>"; // Fechando a tabela da última categoria do laço

		} //Fecha If $num
    

    }

?>


//mostro as respostas que a cotação teve
<?php function mostraRespostaItens(){

    include"Connections/config.php";

        $cliente = '3';
        $cotaNum = '3.3';

		$sql = "SELECT cotacaoItens.cotaNumero, cotacaoItens.codProdClie, cotacaoItens.clienteId, 
		               produto.clienteId, produto.codProdClie, produto.produtoDescr
				FROM produto 
				INNER JOIN cotacaoItens ON cotacaoItens.codProdClie = produto.codProdClie
				Where cotacaoItens.clienteId = '$cliente'
				  AND cotacaoItens.clienteId = produto.clienteId  ";

			$stmt = $conecta->prepare($sql);
			$stmt->execute();

		    $num = $stmt->rowCount();

	   	    $prod = null;        

        
		if($num > 0) {

		    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
		           extract($row);		           	        

		        if($prod != $codProdClie) {

		            if(!is_null($prod)) { echo "</table>"; } 
		            
					echo " <br/>";
                 
                    // seleciono os Código e Descrição dos Produtos
		            echo "<h2>{$codProdClie} - {$produtoDescr}</h2>";

		            echo "<table  border='0' cellpadding='3' cellspacing='2' >";	  
                    
                     mostraRespFornec(); //chamo as resposta por produto

                    }              		       

			    } //Fecha While


                    
 			    echo "</table>"; // Fechando a tabela da última categoria do laço

          }
    }
?>


//Mostro as resposta dos Fornecedores, com suas quantidades e valores
//nesta parte que está o problema.
<?php function mostraRespFornec(){

    include"Connections/config.php";

        $cliente = '3';
        $cotaNum = '3.3';

    /*
		$sql = "SELECT cotacaoResposta.cotaRespId, cotacaoResposta.cotaNumero, cotacaoResposta.codProdClie,
		               cotacaoResposta.cotaOferta, cotacaoResposta.fornecedorId, cotacaoResposta.cotaRespQtde, 
			           cotacaoResposta.cotaRespVlr, cotacaoResposta.cotaRespTotal,
			           fornecedores.fornecedorId, fornecedores.nome,
		               produto.produtoId, produto.codProdClie, produto.produtoDescr, produto.clienteId
			  	  FROM produto 

            INNER JOIN (cotacaoResposta INNER JOIN fornecedores ON cotacaoResposta.fornecedorId = fornecedores.fornecedorId)
                    ON cotacaoResposta.codProdClie = produto.codProdClie 
                    
     			 WHERE cotacaoResposta.cotaNumero = '$cotaNum'
				   AND cotacaoResposta.cotaOferta = '2'            
              GROUP BY fornecedores.fornecedorId
			  ORDER BY cotacaoResposta.cotaRespVlr ASC";	
    */


		$sql = "SELECT cotacaoResposta.cotaRespId, cotacaoResposta.cotaNumero, cotacaoResposta.codProdClie,
		               cotacaoResposta.cotaOferta, cotacaoResposta.fornecedorId, cotacaoResposta.cotaRespQtde, 
			           cotacaoResposta.cotaRespVlr, cotacaoResposta.cotaRespTotal, cotacaoResposta.cotaItensId,
			           fornecedores.fornecedorId, fornecedores.nome
				FROM fornecedores

				INNER JOIN cotacaoResposta ON cotacaoResposta.fornecedorId = fornecedores.fornecedorId
				
				Where  cotacaoResposta.cotaNumero = '$cotaNum'
				AND cotacaoResposta.cotaOferta = '2' 
                GROUP BY fornecedores.fornecedorId
				ORDER BY cotacaoResposta.cotaRespVlr ASC";



			$stmt = $conecta->prepare($sql);
			$stmt->execute();

		    $num = $stmt->rowCount();

	   	    $prod = null;        

        
		if($num > 0) {

            while($row = $stmt->fetch($prod)){          	
		           extract($row);		           	        

		          if($prod != $fornecedorId) {

		            if(!is_null($prod)) { echo "</table>"; } 

      		        echo "  <tr style='color:#1C1C71; font-variant:small-caps; 
			                                          font:16px Arial, Helvetica, sans-serif; font-weight: bold;'>";
			        echo "      <td><div class='fornec'>{$fornecedorId} - {$nome}</div></td>";
		            echo "  </tr>";

                    echo "  <tr>";
			        echo "      <td><div class='no'>Qtde..: {$cotaRespQtde}</div></td>";		
			        echo "  </tr>";

                    echo "  <tr>";
			        echo "      <td><div class='nme-produto'>Valor.: {$cotaRespVlr}</div></td>";  
			        echo "  </tr>";   

                    echo "  <tr>";
			        echo "      <td><div class='nme-produto'>Total.: {$cotaRespTotal}</div></td>";  
			        echo "  </tr>";  

			        echo "  <td>&nbsp;</td>";                 		       
                 }

			    } //Fecha While
                    
 			    echo "</table>"; // Fechando a tabela da última categoria do laço

          }
    }
?>

 

Já esgotei todo o meu conhecimento, não consigo resolver este erro.

Por favo, alguém pode me ajudar.

 

Grato,

 

Renato

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Bom  dia

Esta instrução está errada.

SELECT cotacao.cotaNumero, cotacao.cotaTitulo, clientes.clienteId, clientes.nome
FROM clientes 
INNER JOIN cotacao ON cotacao.cotaNumero = '$cotaNum'
Where clientes.clienteId = '$cliente' 

Quando usamos o INNER JOIN estamos buscando uma interseção entre dois conjuntos (aquilo que aprendemos no ensino fundamental).

Em banco de dados esta ação implica em buscar os elementos que estão nas duas tabelas, para que seja estabelecido um relacionamento entre um para muitos entre elas. 

A pergunta aqui é qual o campo de cliente que faz associação em cotação ou vice-versa?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...