Ir para conteúdo

POWERED BY:

Arquivado

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

Espanhol

Select Case múltiplo

Recommended Posts

Olá gente.

Tenho uma pequena dúvida:

 

Gostaria q um Select Case retornasse valores personalizados. Assim: imaginemos que no campo SECAO o valor 'video' seja capturado. Então, o Case irá colar o link lá no ASP. Se o Case retornar como 'artigo'... o Case irá gerar no geralink, o link correspondente.

Abaixo tem a minha idéia. Por favor vejam aí :)

 

<%
 WHILE not rs.eof  Do Until

   Select Case rs("secao")

	   Case "video"
		 geralink = "java script:abre_vplayer('video_player.asp?id=<%=rs("id")%>');"


	   Case "artigo"
		 geralink = "artigo.asp?id=<%=rs("id")%>"


	   Case "banco de textos"
		 geralink = "vertexto.asp?id=<%=rs("id")%>"

   End Select
%> 


	  <h2><%=rs("secao")%></h2>
	  <h1><a href="<%=geralink%>" target="_parent"><%=rs("titulo")%></a></h1>
	  <p><a href="<%=geralink%>" target="_parent"><%=rs("descricao")%></a></p>

	  <% RS.MoveNext %>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por favor vejam aí :)

ja vi

 

 

sacanagem

qual a duvida?

deu erro? quer saber se é viavel?

e normal case dentro de loop, nao ha problema

 

em termos de desempenho, nao sei se ha vantagens entre aplicar 'select case' ou 'if'

sera que alguem sabe?

 

use case else

eu sempre uso case else com redir

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Select case é melhor que o IF em termos de performance e, caso se trabalhe com functions, até mais simples de se adicionar parâmetros posteriormente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

se o valor é sempre o mesmo para qualquer video, é mais simples, logico, facil de implementar e de alta performace se estivese uma coluna com o link completo, ai você faz um replace do id

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com o Select Case você tem praticidade na atualização de seções, pois não se precisa alterar o código do design, o que é mais complicado e pode causar problemad,porém o código fica maior, como é o mesmo para todas as páginas. Se o servidor for lento, os visitantes podem ter alguma queda de desempenho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha só, a intenção é de ser um mecanismo simples de busca. Como serão consultas em 3 tabelas.... então cada seção precisa ter um link específico.

 

EX: para uma ocorrência na tabela ARTIGOS o link deve ser

artigo.asp?id=<%=rs("id")%> para uma ocorrência na tabela BANCO_TEXTOS o link deve ser vertexto.asp?id=<%=rs("id")%> e para uma ocorrência na tabela VIDEOS o link deve ser java script:abre_vplayer('video_player.asp?id=');

 

Se a busca retornar uma ocorrência na tabela ARTIGOS, o nome de <%=rs("secao")%> deve retornar artigo

Se a busca retornar uma ocorrência na tabela BANCO_TEXTOS o nome de <%=rs("secao")%> deve retornar banco de textos e assim por diante.

Fiz uma rápida modificação no code e joguei o <%=rs("id")%> lá no xHtml. E então o pensamento é mais ou menos esse gente?

 

<% 
'Vamos recuperar a variável do formulário:
busca = Request.Form("busca")

Sql = "SELECT * FROM Artigos, Banco_textos, Videos WHERE titulo, descricao LIKE '%" & busca & "%' AND status = 'ativo' ORDER BY id DESC"
Set rs = Server.CreateObject("ADODB.Recordset")
Set rs = Conexao.Execute(Sql)
%>



<%
WHILE not rs.eof  Do Until

   Select Case rs("secao")

	   Case "video"
		 geralink = "java script:abre_vplayer('video_player.asp?id=');"


	   Case "artigo"
		 geralink = "artigo.asp?id="


	   Case "banco de textos"
		 geralink = "vertexto.asp?id="

   End Select
%>


	  <h2><%=rs("secao")%></h2>
	  <h1><a href="<%=geralink%><%=rs("id")%>" target="_parent"><%=rs("titulo")%></a></h1>
	  <p><a href="<%=geralink%><%=rs("id")%>" target="_parent"><%=rs("descricao")%></a></p>

	  <% RS.MoveNext %>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Set rs = Conexao.Execute(Sql)

%>

 

<%

WHILE not rs.eof Do Until

...

End Select

%>

 

 

<h2><%=rs("secao")%></h2>

<h1><a href="<%=geralink%><%=rs("id")%>" target="_parent"><%=rs("titulo")%></a></h1>

<p><a href="<%=geralink%><%=rs("id")%>" target="_parent"><%=rs("descricao")%></a></p>

 

<% RS.MoveNext %>

 

evite abrir e fechar diversas vezes, faca tudo com response.write, melhora o desempenho

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom gente a coisa tá muito complicada quando envolve o geralink com javascript. Decidi criar um buscador só para vídeos e outro só para textos. Só que não consigo colocar mais de uma tabela em FROM. Quando coloco FROM Artigos, Banco_textos dá erro. O mesmo acontece se eu colocar WHERE titulo, descricao

 

Da forma abaixo dá certo... mas apenas com uma tabela em FROM e apenas um valor em WHERE

E agora?

 

ps: fiz um resumo no code pra facilitar.

 

 

 

<% 
	'recupera a variavel do formulario
	busca = Request.Form("busca")

	Sql = "SELECT titulo, secao, descricao, status, id FROM Artigos WHERE titulo LIKE '%" & busca & "%' AND status = 'ativo' ORDER BY id DESC"
	Set rs = Conexao.Execute(Sql)
	%>

	  <p class="txtbusca">Exibindo resultado(s) da busca por: <u><%=busca%></u></p>




	  <%
   Select Case rs("secao")
	   Case "Artigo"
		 geralink = "artigo.asp?id="
		 gerasecao = "Artigo"


	   Case "banco de textos"
		 geralink = "vertexto.asp?id="
		 gerasecao = "Banco de Textos"

   End Select
%>

	  <h2><%=gerasecao%></h2>
	  <h1 class="titulo"><a href="<%=geralink%><%=rs("id")%>" target="_parent"><%=rs("titulo")%></a></h1>

	  <p><a href="<%=geralink%><%=rs("id")%>" target="_target"><%=rs("descricao")%></a></p>

Compartilhar este post


Link para o post
Compartilhar em outros sites

usa o INNER JOIN

Compartilhar este post


Link para o post
Compartilhar em outros sites

xanburzum fiz o tal INNER JOIN mas retornou o erro:

 

 

Microsoft OLE DB Provider for ODBC Drivers error '80004005'

 

Column 'titulo' in field list is ambiguous

 

/buscadortxt.asp, line 95

 

 

<% 
	'recupera a variavel do formulario
	busca = Request.Form("busca")

	Sql = "SELECT titulo, secao, descricao, status, id FROM Artigos INNER JOIN Banco_textos WHERE titulo LIKE '%" & 

busca & "%' AND status = 'ativo' ORDER BY id DESC"
	Set rs = Conexao.Execute(Sql)
	%>
	  <p class="txtbusca">Exibindo resultado(s) da busca textual por: <u><%=busca%></u></p>
	</div>


 <%
   Select Case rs("secao")
	   Case "Artigo"
		 geralink = "artigo.asp?id="
		 gerasecao = "Artigo"


	   Case "banco de textos"
		 geralink = "vertexto.asp?id="
		 gerasecao = "Banco de Textos"

   End Select
%>
	  <h2><%=gerasecao%></h2>
	  <h1 class="titulo"><a href="<%=geralink%><%=rs("id")%>" target="_parent"><%=rs("titulo")%></a></h1>
	  <p><a href="<%=geralink%><%=rs("id")%>" target="_parent"><%=rs("descricao")%></a></p>
	  <%

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz uma pesquisa aqui pelo INNER JOIN e aí depois de ler algumas coisas, fiz uma alteração na string do SQL.

 

ficou assim:

 

<% 
	'recupera a variavel do input do formulario
	busca = Request.Form("busca")

	Sql = "SELECT Artigos.titulo, Banco_textos.titulo FROM Artigos INNER JOIN Banco_textos WHERE Artigos.titulo, Banco_textos.titulo   LIKE   '%" & busca & "%'   AND  status = 'ativo'  ORDER BY Artigos.id, Banco_textos.id DESC"
	Set rs = Conexao.Execute(Sql)
	%>

Retornou o 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 ' Banco_textos.titulo LIKE '%a%' AND status = 'ativo' ORDER BY Artigos.id, Banco_' at line 1

 

/buscadortxt.asp, line 104

----------------------------------------

 

Tentei colocar no SELECT os campos que uso no xhtml para imprimir os dados coletados no banco, mas deu pau. Campos: "secao" , "id" , "titulo" , "descricao", "status"

 

Onde estou errando?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O INNER JOIN está errado.

 

É FROM Artigos A INNER JOIN Banco_textos B ON A.codigoEmComum = B.codigoEmComum

Compartilhar este post


Link para o post
Compartilhar em outros sites

hargon, com a sua dica ficaria assim o code?

 

 

Sql = "SELECT Artigos.titulo, Banco_textos.titulo FROM Artigos titulo INNER JOIN Banco_textos titulo ON Artigos.titulo = Banco_textos.titulo WHERE Artigos.titulo, Banco_textos.titulo   LIKE   '%" & busca & "%'   AND  status = 'ativo'  ORDER BY Artigos.id, Banco_textos.id DESC"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não... o ideal é usar códigos em comum no INNER JOIN

Sql = "SELECT A.titulo FROM Artigos A INNER JOIN Banco_textos B ON A.id = B.id WHERE (A.titulo LIKE   '%" & busca & "%' Or B.titulo LIKE '%" & busca & "%') AND status = 'ativo'  ORDER BY A.id DESC"
Se der errado, posta o nome da tabela e os campos delas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

hargon, fiz aqui o teste e deu erro:

 

 

Microsoft OLE DB Provider for ODBC Drivers error '80004005'

 

Not unique table/alias: 'titulo'

 

/buscadortxt.asp, line 103

----------------------------------

 

Utilizei o code:

Sql = "SELECT Artigos.titulo, Banco_textos.titulo FROM Artigos titulo INNER JOIN Banco_textos titulo ON Artigos.titulo = Banco_textos.titulo WHERE Artigos.titulo, Banco_textos.titulo   LIKE   '%" & busca & "%'   AND  status = 'ativo'  ORDER BY Artigos.id, Banco_textos.id DESC"

 

O que estou querendo é o seguinte: que a busca pesquise ocorrências nas tabelas ARTIGOS e BANCO_TEXTOS. E dentro dessas tabelas, ele pesquise os campos TITULO e DESCRICAO mas que exiba apenas ocorrências onde status = 'ativo'

É isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

voce esta dando o mesmo alias para duas tabelas

 

mude um

 

FROM Artigos titulo INNER JOIN Banco_textos titulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não fez conforme eu postei por último.

 

Como o Mario disse, você está duplicando o nome das tabelas e ainda colocando o mesmo nome de um campo. Faça o teste com a SQL que postei.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poxa, utilizei o code que você tinha passado mas deu erro novamente.

De acordo com a descrição do erro, o trauma agora é com 'status'

:(

 

 

código sugerido:

Sql = "SELECT A.titulo FROM Artigos A INNER JOIN Banco_textos B ON A.id = B.id WHERE (A.titulo LIKE   '%" & busca & "%' Or B.titulo LIKE '%" & busca & "%') AND status = 'ativo'  ORDER BY A.id DESC"

Erro retornado:

Microsoft OLE DB Provider for ODBC Drivers error '80004005'

 

Column 'status' in where clause is ambiguous

 

/buscadortxt.asp, line 101

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem o campo status em duas tabelas? É necessário que ele seja verdadeiro nas duas para exibir os dados?

 

O que falta é você referenciar a qual tabela ele pertence.

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.