Ir ao conteúdo
  • Cadastre-se

PHP retornando dados de chave estrangeira


Posts recomendados

Gente, é o seguinte, no dever da professora ela pediu pra criar um site e pediu pra fazer uma listagem dos dados que estão no banco, mas eu nao quero que apareça o id das chaves estrangeiras, mas o nome delas, por exemplo, nao quero que mostre o id do autor e do tradutor, mas o nome do autor e do tradutor, eu tentei usar inner join olhando na internet mas nao consegui. Agradeceria se alguem me ajudar com isso. 

to colocando a imagem do do diagrama do banco e o codigo do arquivo php responsavel pela listagem do jeito que tava antes, mostrando os id's.

<html>
 <head><title>Listagem NovelCN</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  
 </head>

  <body>

    <?php

    $con=mysqli_connect("localhost","root","","trabalhophp");

    if (mysqli_connect_errno())
      { echo "Failed to connect to MySQL:".mysqli_connect_error();}

    $result=mysqli_query($con, "SELECT * FROM novelchinesa");

    ?>

    <p> <center>

    <table border="2" bordercolor="blue">

    <tr>

      <th>Id</th>
      <th>Titulo</th> 
      <th>Ano</th> 
      <th>Descrição</th> 
	  <th>Gênero</th>
  	  <th>Idioma</th>
	  <th>Autor</th>
      <th>Tradutor</th>
      <th>Deleta</th>
      <th>Alt</th>


    </tr>

    <?php while($row = mysqli_fetch_array($result)){?>


    <tr>  

    <td><?php echo $row['idNovel']; ?>  </td>  
    <td><?php echo $row['titulo']; ?></td>
    <td><?php echo $row['ano']; ?> </td>
    <td><?php echo $row['descricao']; ?></td>
    <td><?php echo $row['genero']; ?></td>  
    <td><?php echo $row['idioma']; ?></td>  
    <td><?php echo $row['Autor_idAutor']; ?></td>  
    <td><?php echo $row['Tradutor_idTradutor']; ?></td>  

    <td>
      <form action="realizadelnovelcn.php" method="post">
      <input type="hidden" name="id" value="<?php echo $row["id"]; ?>"/>
      <button type="submit" name="botdelnovelcn" value="ok">Del</button>
      </form>
    </td>

    <td>
      <form action="formaltnovelcn.php" method="post">
      <input type="hidden" name="id" value="<?php echo $row["id"]; ?>"/>
      <button type="submit" name="botaltnovelcn" value="ok">Alt</button>
      </form>
    </td>
    </tr>

        <?php }   mysqli_close($con);?>  

   </table></p>


   <center><h2><a href="index.php"><button>VOLTAR</button></a></h2></center>






</body>
</html>


 

diagrama.PNG

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Lucio Carvalho Olá, 

Então. A solução é mesmo usar INNER JOIN.

Porém para dar certo é necessário que as tabelas na qual você fará a consulta tenha um índice para ele.(index)

 

Basicamente a sua consulta deveria ser:

SELECT
      NovelChinesa.titulo,
      NovelChinesa.ano,
      NovelChinesa.descricao,
      NovelChinesa.genero,
      NovelChinesa.idioma,
      Autor.nome,
      Tradutor.nome
FROM NovelChinesa
INNER JOIN Autor ON Autor.idAutor = NovelChinesa.Autor_idAutor
INNER JOIN Tradutor ON Tradutor.idTradutor = NovelChinesa.Tradutor_idTradutor 

No inner join, você deve associar id da tabela que é chave primária com o id da chave estrangeira.

 

Você fará esta mesma consulta mas trocando o NovelChinesa por NovelCoreana. 

 

Se você quiser ter um banco melhor modelado, deve-se criar uma tabela para o tipo de novel por exemplo tipo_novel, no caso Chinesa ou Coreana e incluir os ids na tabela que for fazer a consulta.

Destrinchar as tabelas,faz parte das normas formais.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

eu estou com 2 dúvidas, 

uma é com relação ao inner join, em um post anterior alguem me explicou e ate me deu o codigo, eu não vi problema no codigo, contudo ele duplica os dados.

eu tenho primeiro o nome do autor e depois o nome do tradutor, mas ta mostrando o nome do tradutor no campo de autor e  no campo do tradutor.

 

a segunda dúvida que tenho é sobre usar php pra alterar dados no formulario, como :

                     

   <tr>
                            <td>Nome:</td> 
                        <td>
                            <input type="text" name="nome" value="<?php    
                            echo $row['nome']; ?>" />    
                        </td>
                        </tr>

onde vai no formulario mostrar o nome ja cadastrado, mas e se eu quiser usar isso pra select que ja tem um php pra pegar dados do banco? Alguem tem um bom site ou conteudo pra eu estudar sobre isso?

 

segue o código pra listar os dados com inner join:

 

<html>
 <head><title>Listagem NovelCN</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  
 </head>

  <body>

    <?php

    $con=mysqli_connect("localhost","root","","trabalhophp");

    if (mysqli_connect_errno())
      { echo "Failed to connect to MySQL:".mysqli_connect_error();}

    $result=mysqli_query($con,"SELECT
      NovelChinesa.titulo,
      NovelChinesa.ano,
      NovelChinesa.descricao,
      NovelChinesa.genero,
      NovelChinesa.idioma,
      autor.nome,
      tradutor.nome
    FROM NovelChinesa
    INNER JOIN autor ON autor.idAutor = novelchinesa.Autor_idAutor	
    INNER JOIN tradutor ON tradutor.idTradutor = novelchinesa.Tradutor_idTradutor");

    ?>

    <p> <center>

    <table border="2" bordercolor="blue">

    <tr>

 
      <th>Titulo</th> 
      <th>Ano</th> 
      <th>Descrição</th> 
	  <th>Gênero</th>
  	  <th>Idioma</th>
	  <th>Autor</th>
      <th>Tradutor</th>
      <th>Deleta</th>
      <th>Alt</th>


    </tr>

    <?php while($row = mysqli_fetch_array($result)){?>


    <tr>  

 
    <td><?php echo $row['titulo']; ?></td>
    <td><?php echo $row['ano']; ?> </td>
    <td><?php echo $row['descricao']; ?></td>
    <td><?php echo $row['genero']; ?></td>  
    <td><?php echo $row['idioma']; ?></td>  
    <td><?php echo $row['nome']; ?></td>  
    <td><?php echo $row['nome']; ?></td>  

    <td>
      <form action="realizadelnovelcn.php" method="post">
      <input type="hidden" name="id" value="<?php echo $row["id"]; ?>"/>
      <button type="submit" name="botdelnovelcn" value="ok">Del</button>
      </form>
    </td>

    <td>
      <form action="formaltnovelcn.php" method="post">
      <input type="hidden" name="id" value="<?php echo $row["id"]; ?>"/>
      <button type="submit" name="botaltnovelcn" value="ok">Alt</button>
      </form>
    </td>
    </tr>

        <?php }   mysqli_close($con);?>  

   </table></p>


   <center><h2><a href="index.php"><button>VOLTAR</button></a></h2></center>






</body>
</html>


 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!