Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal, gostaria de uma força.
Tenho 2 tabelas num BD. Uma se chama Artigos e a outra se chama Colunistas.
Os campos da tabela "Artigos" são: id, titulo, texto, nome
Os campos da tabela "Colunistas" são: id, nome, foto, descricao, status
A idéia é que o valor do campo 'nome' seja colado no campo 'autor'.
Ex: Vamos imaginar q a tabela Artigos no ID de número 1, a página asp recupere as seguintes informações:
titulo: Como estudar asp?
texto: aprenda agora as dicas
autor: Mark Jon
Agora, vamos imaginar a tabela Colunistas com os valores:
nome: Mark Jon
foto: mj.jpg
descricao: Mark Jon e formado pela...
status: ativo
Eu gostaria que o ASP mostrasse a descrição do colunista de acordo com o valor presente no campo NOME capturado na tabela Artigos.
Por exemplo: a página mostra o texto e título de um artigo (tabela Artigos) e mostra também as informações sobre o autor (tabela Colunistas).
Imaginemos que o ASP captura o ID:2 da tabela Artigos, e retorne no campo autor: Luck T. Outra string fara uma conexão na tabela Colunistas, e vai procurar
por 'Luck T' no campo nome. Abaixo vai o script.
<%
AbreConexao
Sql = "SELECT * FROM Artigos WHERE id="&request.querystring("id")&""
Set rs = Conexao.Execute(Sql) <div id="texto">
<h1> <%=rs("titulo")%> - Por: <%=rs("autor")%> </h1>
<p> <%=rs("texto")%> </p>
</div> Sql = "SELECT * FROM Colunistas WHERE nome="& request.querystring("autor") &" AND status = 'ativo' "
Set rs = Conexao.Execute(Sql) <div class="autor">
<img src="colunistas/<%=rs("foto")%>" alt="" width="44" height="54" class="imgformato" />
<p><%=rs("nome")%> - <%=rs("descricao")%></p>
</div>como nosso amigo disse , geralmente usamos o campo ID, relacionando na tabela , onde você define a
informção de uma tabela que se relaciona com as informações de outra tabela, cabe destacar a import^ncia de uma modelagem de dados bem definida, como os campos de relacionamentos, um velho ditado diz, que um relacionamento bem definido é a alma de uma aplicativo, pois daí saem todas as consultas e operações do banco, influenciando diretamente na otimização e performance.
Cria o campo "cd_colunista" dentro de artigos...
tornando assim mais fácil a consulta...! ou seja quando for usar a sql você monta ela assim:
sql = "select * from artigos order by data"
set rs = conexao.execute(sql)
cd_colunista = rs("cd_colunista")
sql2 = "select * from artigos where cd_colunista="&cd_colunista
set rs2 = conexao.execute(sql2)
Ai o resto eu acho que você já sabe...
nao guarde o nome na tabela coluna, guarde o id do colunista
alem de ocupar menos espaco é muito mais pratico
se por algum motivo um colunista fizer uma troca de sexo e passar de robretO pra robertA, você tera que mudar em todas as colunas dele (ou dela) :)
brincadeira, mas o cara pode querer trocar o sobrenome, a mulher tirar o sobrenome do marido... é dificil, mas nao impossivel, e você tem que estar usando o "metodo pratico"
recomendo usar INNER JOIN, eu estava com uma consulta similar a sua e o ted me lembrou
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.P_Id=Orders.P_Id
ORDER BY Persons.LastName
Olhá só, a idéia era de criar uma tabela COLUNISTAS só mesmo pra guardar informações sobre nome, foto e descrição da pessoa, para assim depois eu poder editar tranquilamente. Já a tabela ARTIGOS se encarrega de guardar informações sobre texto do artigo, título, data e por ai vai.
Com a dica de vcs, eu terei que reestruturar a tabela ARTIGOS e na coluna 'autor' alterar por 'cod_autor'
para que o id correspondente de cada colunista na tabela COLUNISTAS seja resgatado pelo
rs("cod_autor") né isso? Sou iniciante nisso...
Como daria pra adaptar nesse code?
<%
AbreConexao
Sql = "SELECT * FROM Artigos WHERE id="&request.querystring("id")&""
Set rs = Conexao.Execute(Sql) <h1> <%=rs("titulo")%> - Por: <%=rs("autor")%> </h1>
<p> <%=rs("texto")%> </p>
//-- aqui vai a parte do colunista
<%
Sql = "SELECT * FROM Colunistas WHERE nome="& request.querystring("autor") &" AND status = 'ativo' "
Set rs = Conexao.Execute(Sql) <img src="colunistas/<%=rs("foto")%>" />
<p><%=rs("nome")%> - <%=rs("descricao")%></p>Acreditando que esse seria o trecho que exibiria a lista com os titulos dos artigos do autor ficaria algo +/- assim:
<%
AbreConexao
ID = Replace(Request("ID"),"'","''")
Sql = "SELECT Colunistas.*, Artigos.* FROM Colunistas, Artigos WHERE Colunistas.ID="& ID &" AND Artigos.CodColunista = Colunistas.ID AND Colunistas.status = 'ativo';"
Set rs = Conexao.Execute(Sql)
If Not RS.EOF Then <img src="colunistas/<%=rs("foto")%>" />
<p><%=rs("nome")%> - <%=rs("descricao")%></p> <h1> <%=rs("titulo")%></h1>
<p> <%=rs("texto")%> </p>Bom pessoal, vou testar aqui e aviso no que acontecer...
Depois do WHERE não pode entrar virgulas, as condições são "ligadas" por AND, OR, IN e outros. Veja no exemplo que postei acima da sua última postagem e teste.
Uma outra dica, sempre que um teste apresentar um erro, mostre-o para nós também, assim podemos ajudar melhor.
Salgado, fiz os testes aqui mas não rolou. Deu o seguinte erro:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND Artigos.cd_colunista = Colunistas.id' at line 1
/artigo2.asp, line 86
-----------------------------
Eu eliminei o ID = Replace(Request("ID"),"'","''") que tinha no seu cógico, pois o id do artigo já é capturado já nas primeiras linhas, para assim exibir o conteúdo.
Dentro da tabela: Artigos acrecentei o campo: cd_colunista como sugerido pelos colegas.
Vamos supor que alguém clique num link chamado artigo.asp?id=20 então o sql principal vai consultar na tabela Artigos pelo id de valor 20 e colar o titulo, data, texto ... além de capturar o campo cd_colunista. Vamos supor que encontre no campo cd_colunista o valor 6. Então o sql secundário (o do autor) vai procurar na tabela Colunistas o valor 6 no campo id e assim mostrar informações sobre nome, foto e descrição do cara.
Aqui vai o link da imagem do layout para ilustrar melhor como deve ser:
http://www.4shared.com/file/75643307/a4496...a_imasters.html
Aqui vai o sql para as informações do autor do artigo
<%
Sql = "SELECT Colunistas.*, Artigos.* FROM Colunistas, Artigos WHERE Colunistas.id="& id &" AND Artigos.cd_colunista = Colunistas.id"
Set rs = Conexao.Execute(Sql)
%>
<img src="colunistas/<%=rs("foto")%>" />
<p><%=rs("nome")%> - <%=rs("descricao")%></p>Pessoal, trago boas notícias. Consegui resolveu o trauma. Fiz uma "moqueca" com os códigos e com as dicas de vcs, e aí no final acabou dando certo. Muito obrigado mesmo pela atenção. Assim que o site que estou fazendo, ficar pronto vou passar o link para vcs darem um saque.
Se alguém futuramente tiver o mesmo problema, é só vcs passarem o link desse post. Um abraço!
Abaixo vai o meu code final:
<!--#include file="conectar.asp"-->
<%
AbreConexao
Sql = "SELECT * FROM Artigos WHERE id = "&request.querystring("id")&" AND status = 'ativo' "
Set rs = Conexao.Execute(Sql)
cd_colunista = rs("cd_colunista")<%
Sql2 = "SELECT * FROM Colunistas WHERE id = "&cd_colunista&" "
Set rs2 = conexao.execute(Sql2) <div class="autor">
<img src="colunistas/<%=rs2("foto")%>" />
<p><strong><%=rs2("nome")%></strong> <%=rs2("descricao")%></p>
</div>
<h1><%=rs("titulo")%></h1>
<p><%=rs("texto")%></p>
<%
RS.Close
Set RS = Nothing
RS2.Close
Set RS2 = Nothing
FechaConexao
%>
O ideal é que relacione não pelo Nome mas pelo ID do Colunista.
Explique melhor como pretende exibir, na mesma página, a partir de um link. Qual a idéia?