Ir para conteúdo

POWERED BY:

Arquivado

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

rogerss_7

Mostrar conteúdos tabelas relacionadas

Recommended Posts

3 Tabelas:

 

tb_grupo: id, nome

tb_regiao: id, nome

tb_usuarios: id, nome, grupo_id, regiao_id

 

-> grupo_id e regiao_id estão herdando (foreign key) as id's de tb_grupo e tb_regiao. <-

 

Bateu uma dúvida de como pegar os campos nome (tb_grupo e tb_regiao) sem tê-los na tb_usuarios.

 

Ex.: Numa página, crio um while que pega todos os nomes da tb_usuarios, só que queria também mostrar a que grupo e região estes nomes pertencem, imagino que dê pra fazer isso através das chaves estrangeiras.

 

Como ficaria o While?

 

Se puderem quebrar este galho me explicando como fazê-lo ficaria agradecido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teve uma duvida parecida com a sua em outro forum , ente no link abaixo, tenho certeza que vai resolver seu problema.

Link

 

Att:

Tullius

Compartilhar este post


Link para o post
Compartilhar em outros sites

$qry = "select * from tb_usuarios";

$qrye = mysql_query($qry);

while($linha = mysql_fetch_array($qrye)){

echo "nome: ".$linha['nome'];

$qry2 = mysql_query("select nome from tb_regiao where id='$linha[regiao_id]'");;

$qry3 = mysql_query("select nome from tb_grupo where id='$linha[grupo_id]'");

echo "Região: ".mysql_result($qry2, 0);

echo "Grupo: ".mysql_result($qry3, 0);

}

 

eh isso =]

n testei nao...mais qlk erro soh pergunta...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado batatinha66 e tullius, este modo, batatinha, não ficaria muito pesado na seleção dos dados?

 

Pelo inner join não é mais prático e funcional pro servidor?

 

Te agradeço pela ajuda, vou analisar com calma.

Compartilhar este post


Link para o post
Compartilhar em outros sites

da uma lida rogerss_7 , :D

 

SELECT INNER JOIN

 

- Utilizamos o inner join em casos que é preciso montar um recordset lendo dados de mais de uma tabela. É uma forma de unir tabelas, e para isso é preciso que haja uma relação entre as mesmas, ou seja, um campo de ligação. É válido dizer que estes campos não precisam conter o mesmo nome, porém devem ser do mesmo tipo.

 

O objetivo desta página é exibir dados de duas tabelas, sendo a de categorias e a de produtos. Imagine você criando um <a href="http://www.ntsearch.com/search.php?q=e-commerce&v=56">e-commerce</a> onde é preciso mostrar aos internautas quais produtos existem por categorias para que eles possam ter uma visão melhor dos dados contidos no banco de dados. É exatamente nesse caso que utilizamos o inner join.

 

A sintaxe do inner join não é difícil de entender, basta ter os relacionamentos das tabelas para saber como ligá-las e quais ligações são possíveis. De um modo geral, toda vez que citar um campo, especifique qual tabela ele pertence. Veja a sintaxe abaixo:

 

strSQL = "SELECT Categoria.Categoria, Produtos.Produto, Produtos.VRL_Unitario "

Seleciona o campo Categoria da tabela Categoria, os campos Produto e VRL_Unitario da tabela Produtos

 

strSQL = strSQL & "FROM Categoria "

A origem é a tabela Categoria. Isso significa que a tabela Categoria é o lado UM de um relacionamento, e com isso, o recordset é montado mais rapidamente; não que esteja errado colocar a tabela Produtos, mas procure adotar esta regra de boas maneiras de programação em banco de dados.

 

strSQL = strSQL & "INNER JOIN Produtos "

A tabela Categoria citada acima será ligada a tabela Produtos.

 

strSQL = strSQL & "ON Categoria.COD_Categoria = Produtos.COD_Categoria "

Aqui é declarado quais os campos de ligação, sendo o campo COD_Categoria da tabela Categoria e o campo COD_Categoria da tabela Produtos.

 

strSQL = strSQL & "ORDER BY Categoria.Categoria, Produtos.Produto"

É determinado a ordem em que o recordset será exibido, sendo primeiro por categoria e em seguida pelo produto.

 

Repare que estou utilizando a técnica do include file, que invoca as rotinas contidas no arquivo bib_conexao.<a href="http://www.ntsearch.com/search.php?q=asp&v=56">asp</a> que é encarregada de abrir e fechar a conexão. Para maiores detalhes veja sobre include file.

 

<%

Option Explicit

%>

<!--# include file="bib_conexao.asp"-->

Dim Conexao, rsProdutos, strSQL

strSQL = "SELECT Categoria.Categoria, Produtos.Produto, Produtos.VRL_Unitario "

strSQL = strSQL & "FROM Categoria "

strSQL = strSQL & "INNER JOIN Produtos "

strSQL = strSQL & "ON Categoria.COD_Categoria = Produtos.COD_Categoria "

strSQL = strSQL & "ORDER BY Categoria.Categoria, Produtos.Produto"

Call abre_conexao

Set rsProdutos = <a href="http://www.ntsearch.com/search.php?q=Server&v=56">Server</a>.CreateObject("ADODB.Recordset")

Set rsProdutos = Conexao.Execute(strSQL)

Response.Write "Produtos por Categoria<br>"

While Not rsProdutos.EOF

Response.Write "categoria: " & rsProdutos("Categoria") & " - "

Response.Write "produto: " & rsProdutos("Produto") & " - "

Response.Write "preço: " & FormatNumber(rsProdutos("VRL_Unitario"),2) & "<br>"

rsProdutos.MoveNext

Wend

rsProdutos.Close

Call fecha_conexao

Set rsProdutos = Nothing

%>

 

 

autor, bom ta espalhado pela net toda, e todos falam que são o autor do texto por este motivo não vou colocar niguem, mas ja digo que não foi eu quem fiz http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

 

Att:

Tullius

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado gente pela ajuda mas não estou conseguindo, olhem o que eu fiz:

SELECT u.*,g.* FROM tb_grupo u INNER JOIN tb_usuarios u ON u.id = g.grupo_id ORDER BY nome ASC

Não estou sabendo a lógica pra puxar estes dados.

 

Relembrando o grupo_id e regiao_id irão servir só pra puxar os nomes da respectivas tabelas linkadas, fora isso mais nada.

 

Obs.: No exemplo fiz só com a tb_grupo, nem assim deu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você usa MySQL ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim.

 

Fiz uma coisa:

 

SELECT u.*, g.*
FROM tb_usuarios u
INNER JOIN tb_grupo g
ON g.id = u.grupo_id

Não está do jeito que eu quero, pois ele substituiu os dados.

 

Quero algo assim:

 

| ID | NOME | NOME-REGIÃO | NOME-GRUPO |

| .... | .........| ............ | ................... |

| .... | .........| ............ | ................... |

| .... | .........| ............ | .................. |

 

ID e NOME são os próprios da tabela_usuarios

 

NOME-REGIÃO E NOME-GRUPO são o regiao_id e grupo_id, que quero substiuir pelos nomes das tabelas tb_regiao e tb_grupo.

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.