Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Remazela

PHP - Relacionar Tabelas INNER JOIN com PHP e MySQLI

Recommended Posts

Caros amigos.

Por favor, me perdoa por recorrer ajuda dos amigos.

Estou com problema de Relacionamento de Tabelas, já li alguns artigos e assisti o vídeo abaixo:

Como criar INNER JOIN com PHP e MySQLi =>

Infelizmente continuo com problema de relacionamento e não consigo solucionar.

Onde devo efetuar o Relacionamento para mostrar o Código + Nome_Cliente ?

Meu Banco de Dados está assim:

CREATE TABLE IF NOT EXISTS `clientes` (
  `clienteId` int(11) NOT NULL AUTO_INCREMENT,
  `criadoEM` timestamp NULL DEFAULT NULL,
  `nome` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `senha` varchar(150) DEFAULT NULL,
  `telefone` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`clienteId`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


CREATE TABLE IF NOT EXISTS `imoveis` (
  `imovelId` int(11) NOT NULL AUTO_INCREMENT,
  `clienteId` varchar(255) DEFAULT NULL,
  `imovelVisitas` varchar(255) DEFAULT NULL,
  `imovelTitulo` varchar(255) DEFAULT NULL,
  `imovelStatus` varchar(255) DEFAULT NULL,
  `imovelConfirma` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`imovelId`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Anexei a imagem das telas:

15203212_1607795699526405_15771786775441

Abaixo posto meus Fontes:

pendentes.php


  <form name="busca" action="painel.php?exe=admin-imoveis/pendentes_busca" enctype="multipart/form-data" method="post">
      <!-- form que após digitar o código do cliente passa para próxima etapa -->
      <label>
          <span style="font: 16px Arial; font-weight:bold; color:#006666;" >Código do Cliente:</span>
          <input type="text" name="clienteId" maxlength="10" size="10" onkeypress="return numberOnly(event)" required />
          <input type="submit" name="executar" id="executar" value="Pesquisar" />
      </label>
  </form>
   
<table width="100%" border="0" cellspacing="3" cellpadding="0">
  <tr style="background:#666; color:#FFF">
    <td align="center">Código Cliente:</td>
    <td align="center">Código Anúncio:</td>
    <td align="center">Título do Anúncio:</td>
    <td align="center">Cadastro em:</td>
  </tr>
  
 <?php

 $data = date('Y-m-d H:m:s');
 $imovelStatus = 'pendente';

    //Paginação da página
    $pag = "$_GET[pag]";
    if($pag >= '1'){
     $pag = $pag;
     } else {
       $pag = '1';
    }

    $maximo = '15'; //RESULTADOS POR PÁGINA
    $inicio = ($pag * $maximo) - $maximo; 

    $sql_pegaAtivos = 'SELECT * FROM imoveis WHERE imovelStatus = :imovelStatus 
                       AND imovelTermino >= :data 
                       ORDER BY imovelTermino ASC LIMIT '.$inicio.','.$maximo;

    try{
       $query_pegaAtivos = $conecta->prepare($sql_pegaAtivos);
       $query_pegaAtivos->bindValue(':imovelStatus',$imovelStatus,PDO::PARAM_STR);
       $query_pegaAtivos->bindValue(':data',$data,PDO::PARAM_STR);  
       $query_pegaAtivos->execute();
      
       $resultado_pegaAtivos = $query_pegaAtivos->fetchAll(PDO::FETCH_ASSOC);
       $count_pegaAtivos = $query_pegaAtivos->rowCount(PDO::FETCH_ASSOC);
       
       } catch(PDOexception $error_pegaAtivos) {
            echo 'Erro ao pegar ativos'.$error_pegaAtivos->getMessage();
       }
       
       foreach($resultado_pegaAtivos as $resAtivos){
               $anuncioCliente = $resAtivos['clienteId'];
               $anuncioId      = $resAtivos['imovelId'];
               $anuncioTitulo  = $resAtivos['imovelTitulo'];
               $anuncioInicio  = $resAtivos['imovelCadastro'];
               $anuncioFinal   = $resAtivos['imovelTermino'];
               $anuncioVisitas = $resAtivos['imovelVisitas'];

             //Código para mudar as linhas da Tabela autoincremento.
             $i++;
             if($i % 2 == 0){
               //Cor para toda vez que a linha for par
               $cor = 'style="background: #F5FFFA"';
             }else{
               //Cor para toda vez que a linha for impar
               $cor = 'style="background: #B4EEB4;"';
             }
 
 ?> 
 
  <!-- Mostrar os campos na Tabela -->
  <tr <?php echo $cor;?>>
    <td align="center"><?php echo $anuncioCliente ;?></td>
    <td align="center"><?php echo $anuncioId ;?></td>
    <td align="left">  <?php echo $anuncioTitulo ;?></td>
    <td align="center"><?php echo date('d/m/Y',strtotime($anuncioInicio));?></td>
  </tr>
  
  <?php

   } //Fechar o 1.Foreach
  
  ?>

</table>

pendentes_busca.php

    <form class="f_form">
      <!-- Nessa label - mostro o Código do cliente -->
      <label><span style="font:18px Arial; font-weight:bold; color:#333333;" >Código: <?php echo $_POST['clienteId']; ?></span></label>  
    </form> 

    <table width="100%" border="0" cellspacing="3" cellpadding="0">
      <tr style="background:#666; color:#FFF">
        <td align="center">Cód. Cliente:</td>
        <td align="center">Cód. Anúncio:</td>
        <td align="center">Título do Anúncio:</td>
        <td align="center">Cadastro em:</td>
        <td align="center">Executar:</td>
      </tr>
      

     <?php

         $clienteId    = $_POST['clienteId'];
         $data         = date('Y-m-d H:m:s');
         $imovelStatus = 'pendente';

            //Paginação da página
            $pag = "$_GET[pag]";
            if($pag >= '1'){
             $pag = $pag;
             } else {
               $pag = '1';
            }

            $maximo = '10'; //RESULTADOS POR PÁGINA
            $inicio = ($pag * $maximo) - $maximo; 

               $sql_pegaAtivos = 'SELECT * FROM imoveis WHERE clienteId = :clienteId 
                                        AND imovelStatus = :imovelStatus 
                                        AND imovelTermino >= :data
                                        ORDER BY imovelTermino ASC LIMIT '.$inicio.','.$maximo;    

         try{
                 $query_pegaAtivos = $conecta->prepare($sql_pegaAtivos);
                 $query_pegaAtivos->bindValue(':clienteId',$clienteId,PDO::PARAM_STR);
                 $query_pegaAtivos->bindValue(':imovelStatus',$imovelStatus,PDO::PARAM_STR);
                 $query_pegaAtivos->bindValue(':data',$data,PDO::PARAM_STR);
                 $query_pegaAtivos->execute();
          
                 $resultado_pegaAtivos = $query_pegaAtivos->fetchAll(PDO::FETCH_ASSOC);
           
           }catch(PDOexception $error_pegaAtivos){
                echo 'Erro ao pegar ativos'.$error_pegaAtivos->getMessage();
           }
           
           foreach($resultado_pegaAtivos as $resAtivos){
                   $anuncioId      = $resAtivos['imovelId'];
                   $anuncioTitulo  = $resAtivos['imovelTitulo'];
                   $anuncioInicio  = $resAtivos['imovelCadastro'];
                   $anuncioFinal   = $resAtivos['imovelTermino'];
                   $anuncioVisitas = $resAtivos['imovelVisitas'];
                   $anuncioStatus  = $resAtivos['imovelStatus'];

                 //Código para mudar as linhas da Tabela autoincremento.
                 $i++;
                 if($i % 2 == 0){
                   //Cor para toda vez que a linha for par
                   $cor = 'style="background: #F5FFFA"';
                 }else{
                   //Cor para toda vez que a linha for impar
                   $cor = 'style="background: #B4EEB4;"';
                 }

     ?> 

      <tr <?php echo $cor;?>>
          <td align="center"><?php echo $clienteId ;?></td>
          <td align="center"><?php echo $anuncioId ;?></td>
          <td align="left">  <?php echo $anuncioTitulo ;?></td>
          <td align="center"><?php echo date('d/m/Y',strtotime($anuncioInicio));?></td>

          <td align="center">
               <form name="analisar" action="painel.php?exe=admin-imoveis/pendentes_change&anuncio=<?php echo $anuncioId;?>" 
                     enctype="multipart/form-data" method="post" >
                  <input type="hidden" name="imovelId" value="<?php echo $anuncioId;?>" />
                  <input type="submit" name="executar" id="executar" value="Analisar Anúncio" />
               </form>    
          </td>

      </tr>
      
      <?php

       } //Fechar o 1.Foreach
      
      ?>

    </table>

Compartilhar este post


Link para o post
Compartilhar em outros sites
O relacionamento é criado usando chaves estrangeiras (FK). No seu caso é interessante adicionar a FK, pois pelo visto o imóvel pertence à um cliente, já que possui a coluna clienteId.


Independente de ter chave estrangeira ou não nas tabelas, para trazer dados de várias tabelas que possuem dados relacionados, você utiliza JOIN informando qual a coluna da tabela X (clientes) que referencia a coluna da tabela Y (imoveis). No seu caso a consulta seria esta:



SELECT
i.imovelTitulo, c.clienteId, c.nome
FROM imoveis as i
INNER JOIN clientes as c ON c.clienteId = i.clienteId


Depois da linha onde está o JOIN você pode adicionar o restante da sua consulta (where, order by, limit, etc), mas referenciando a tabela onde está a coluna (ex: ORDER BY c.nome). Caso o nome da coluna não se repita nas tabelas, não é necessário adicionar o prefixo da tabela (mas é uma boa prática adicionar, pois só de olhar você já sabe de qual tabela é; e também evita conflitos se caso você ou outra pessoa futuramente adicionar coluna com mesmo nome nas tabelas).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro amigo

Anderson Mamede

Desculpa não entendi, pode me ajudar com um exemplo.

Tenho as variáveis principais para buscar no banco de dados:

$clienteId = $_POST['clienteId']; //variável que vem do pendentes.php

$data = date('Y-m-d H:m:s'); //data atual que compraro com imovelTermino
$imovelStatus = 'pendente'; //status do anúncio

     <?php
        
         //Variáveis para fazer a busca
         $clienteId    = $_POST['clienteId'];
         $data         = date('Y-m-d H:m:s');
         $imovelStatus = 'pendente';

            //Paginação da página
            $pag = "$_GET[pag]";
            if($pag >= '1'){
             $pag = $pag;
             } else {
               $pag = '1';
            }

            $maximo = '10'; //RESULTADOS POR PÁGINA
            $inicio = ($pag * $maximo) - $maximo; 

               //SQL para buscar no Banco de Dados 
               $sql_pegaAtivos = 'SELECT * FROM imoveis WHERE clienteId = :clienteId 
                                        AND imovelStatus = :imovelStatus 
                                        AND imovelTermino >= :data
                                        ORDER BY imovelTermino ASC LIMIT '.$inicio.','.$maximo;    

         //Pego os dados para que preciso
         try{
                 $query_pegaAtivos = $conecta->prepare($sql_pegaAtivos);
                 $query_pegaAtivos->bindValue(':clienteId',$clienteId,PDO::PARAM_STR);
                 $query_pegaAtivos->bindValue(':imovelStatus',$imovelStatus,PDO::PARAM_STR);
                 $query_pegaAtivos->bindValue(':data',$data,PDO::PARAM_STR);
                 $query_pegaAtivos->execute();
          
                 $resultado_pegaAtivos = $query_pegaAtivos->fetchAll(PDO::FETCH_ASSOC);
           
           }catch(PDOexception $error_pegaAtivos){
                echo 'Erro ao pegar ativos'.$error_pegaAtivos->getMessage();
           }
           
           //Monto a Tabela com os dados
           foreach($resultado_pegaAtivos as $resAtivos){
                   $anuncioId      = $resAtivos['imovelId'];
                   $anuncioTitulo  = $resAtivos['imovelTitulo'];
                   $anuncioInicio  = $resAtivos['imovelCadastro'];
                   $anuncioFinal   = $resAtivos['imovelTermino'];
                   $anuncioVisitas = $resAtivos['imovelVisitas'];
                   $anuncioStatus  = $resAtivos['imovelStatus'];

                 //Código para mudar as linhas da Tabela autoincremento.
                 $i++;
                 if($i % 2 == 0){
                   //Cor para toda vez que a linha for par
                   $cor = 'style="background: #F5FFFA"';
                 }else{
                   //Cor para toda vez que a linha for impar
                   $cor = 'style="background: #B4EEB4;"';
                 }
    
     ?> 

      <tr <?php echo $cor;?>>
          <td align="center"><?php echo $clienteId ;?></td>
          <td align="center"><?php echo $anuncioId ;?></td>
          <td align="left">  <?php echo $anuncioTitulo ;?></td>
          <td align="center"><?php echo date('d/m/Y',strtotime($anuncioInicio));?></td>

          <td align="center">
               <form name="analisar" action="painel.php?exe=admin-imoveis/pendentes_change&anuncio=<?php echo $anuncioId;?>" 
                     enctype="multipart/form-data" method="post" >
                  <input type="hidden" name="imovelId" value="<?php echo $anuncioId;?>" />
                  <input type="submit" name="executar" id="executar" value="Analisar Anúncio" />
               </form>    
          </td>

      </tr>
      
      <?php

       } //Fechar o 1.Foreach
      
      ?>

Grato,

Renato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você só precisa incluir o INNER JOIN na sua consulta e referenciar de quais tabelas vem as colunas

Na sua consulta ficaria assim:

$sql_pegaAtivos = '
    SELECT i.*, c.nome FROM imoveis as i
        INNER JOIN clientes as c ON c.clienteId = i.clienteId
        WHERE i.clienteId = :clienteId 
        AND i.imovelStatus = :imovelStatus 
        AND i.imovelTermino >= :data
        ORDER BY i.imovelTermino ASC LIMIT '.$inicio.','.$maximo;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Remazela,

Pegando o que o Anderson falou, acho que ficaria mais ou menos assim:

<?php
        
         //Variáveis para fazer a busca
         $clienteId    = $_POST['clienteId'];
         $data         = date('Y-m-d H:m:s');
         $imovelStatus = 'pendente';

            //Paginação da página
            $pag = "$_GET[pag]";
            if($pag >= '1'){
             $pag = $pag;
             } else {
               $pag = '1';
            }

            $maximo = '10'; //RESULTADOS POR PÁGINA
            $inicio = ($pag * $maximo) - $maximo; 

               //SQL para buscar no Banco de Dados 
               $sql_pegaAtivos = 'SELECT i.imovelTitulo, c.clienteId, c.nome,imov.imovelCadastro,imov.imovelTermino,imov.imovelStatus,imov.imovelVisitas FROM imoveis imov
                                  INNER JOIN clientes cli ON imov.clienteId = cli.clienteId
                                        WHERE imov.clienteId = :clienteId 
                                        AND imov.imovelStatus = :imovelStatus 
                                        AND imov.imovelTermino >= :data
                                        ORDER BY imov.imovelTermino ASC LIMIT '.$inicio.','.$maximo;    

         //Pego os dados para que preciso
         try{
                 $query_pegaAtivos = $conecta->prepare($sql_pegaAtivos);
                 $query_pegaAtivos->bindValue(':clienteId',$clienteId,PDO::PARAM_STR);
                 $query_pegaAtivos->bindValue(':imovelStatus',$imovelStatus,PDO::PARAM_STR);
                 $query_pegaAtivos->bindValue(':data',$data,PDO::PARAM_STR);
                 $query_pegaAtivos->execute();
          
                 $resultado_pegaAtivos = $query_pegaAtivos->fetchAll(PDO::FETCH_ASSOC);
           
           }catch(PDOexception $error_pegaAtivos){
                echo 'Erro ao pegar ativos'.$error_pegaAtivos->getMessage();
           }
           
           //Monto a Tabela com os dados
           foreach($resultado_pegaAtivos as $resAtivos){
                   $anuncioId      = $resAtivos['imovelId'];
                   $nomeCliente    = $resAtivos['nome'];
                   $anuncioTitulo  = $resAtivos['imovelTitulo'];
                   $anuncioInicio  = $resAtivos['imovelCadastro'];
                   $anuncioFinal   = $resAtivos['imovelTermino'];
                   $anuncioVisitas = $resAtivos['imovelVisitas'];
                   $anuncioStatus  = $resAtivos['imovelStatus'];

                 //Código para mudar as linhas da Tabela autoincremento.
                 $i++;
                 if($i % 2 == 0){
                   //Cor para toda vez que a linha for par
                   $cor = 'style="background: #F5FFFA"';
                 }else{
                   //Cor para toda vez que a linha for impar
                   $cor = 'style="background: #B4EEB4;"';
                 }
    
     ?> 

      <tr <?php echo $cor;?>>
          <td align="center"><?php echo $clienteId ;?></td>
          <td align="center"><?php echo $anuncioId ;?></td>
          <td align="left">  <?php echo $anuncioTitulo ;?></td>
          <td align="center"><?php echo date('d/m/Y',strtotime($anuncioInicio));?></td>

          <td align="center">
               <form name="analisar" action="painel.php?exe=admin-imoveis/pendentes_change&anuncio=<?php echo $anuncioId;?>" 
                     enctype="multipart/form-data" method="post" >
                  <input type="hidden" name="imovelId" value="<?php echo $anuncioId;?>" />
                  <input type="submit" name="executar" id="executar" value="Analisar Anúncio" />
               </form>    
          </td>

      </tr>
      
      <?php

       } //Fechar o 1.Foreach
      
      ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.