rogerss_7 0 Denunciar post Postado Março 15, 2008 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
tullius 0 Denunciar post Postado Março 15, 2008 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
batatinha66 0 Denunciar post Postado Março 15, 2008 $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
rogerss_7 0 Denunciar post Postado Março 15, 2008 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
tullius 0 Denunciar post Postado Março 15, 2008 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
rogerss_7 0 Denunciar post Postado Março 15, 2008 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
Marcio Leandro 0 Denunciar post Postado Março 15, 2008 Você usa MySQL ? Compartilhar este post Link para o post Compartilhar em outros sites
rogerss_7 0 Denunciar post Postado Março 15, 2008 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