Ir para conteúdo

POWERED BY:

Arquivado

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

Espanhol

[Resolvido] Consulta dinâmica numa string Sql

Recommended Posts

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>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>
<%' aqui vai a parte do colunista
 While Not RS.EOF
%>
  <h1> <%=rs("titulo")%></h1>
  <p> <%=rs("texto")%> </p>
<%
RS.MoveNext
 Wend
 RS.Close
 Set RS = Nothing

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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
%>

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.