Ir para conteúdo

Arquivado

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

Christiano Nunes

"Notícias relacionadas"

Recommended Posts

A lógica do meu script funciona da seguinte maneira:

 

Tenho na minha tabela de noticias, um campo chamado PALAVRACHAVE, onde cadastro algumas palavras-chave da notícia para que depois eu possa montar minha lista de "notícias relacionadas". Porém não estou conseguindo fazer isso funcionar corretamente, o resultado aparece muito estranho, não consigo descobrir o erro.

 

Vamos ao código:

 

Para exemplificar o que está acontecendo, digamos que tenho 5 noticias cadastradas da seguinte maneira:

Campo PALAVRACHAVE (tabela – 1NOTICIA):

 

1 - flamengo

2 – vasco

3 – flamengo, botafogo

4 – botafogo, vasco

5 – vasco, flamengo

 

As "notícias relacionadas" aparecem da seguinte forma:

 

Na Notícia 1 – (aparece a 3 e 5) – CORRETO

Na Notícia 2 – (aparece a 4 e 5) – CORRETO

Na Notícia 3 – (aparece a 4) - ERRADO, DEVERIA APARECER A 1, 4 E 5

Na Notícia 4 – (aparece a 2 e 5) - ERRADO, DEVERIA APARECER A 2, 3 E 5

Na Notícia 5 – (aparece a 1 e 3) - ERRADO, DEVERIA APARECER A 1, 2, 3 E 4 - ou as 3 ultimas, pois defino TOP 3 na consulta.

 

meu código:

 

<%strpalavrachave = objRS("palavrachave")MyArray = Split(strpalavrachave," ")strcodnoticia = objRS("cod_noticia")For I=LBound(MyArray) To UBound(MyArray)Set relacionadas = Server.CreateObject("ADODB.Recordset")relacionadas.Open "SELECT TOP 3 * FROM 1NOTICIA WHERE palavrachave LIKE '%" & MyArray (I) & "%' and cod_noticia <>" & strcodnoticia & " and destaque='s' ORDER BY cod_noticia", ConexaoNextIf relacionadas.EOF = true thenelse%><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><th colspan="2" align="left" bgcolor="#E2E2E2" class="texto1" scope="row">Notícias relacionadas:</th></tr></table><%while Not relacionadas.EOF%> <table width="100%" border="0" cellpadding="0" cellspacing="1" bordercolor="#FFFFFF"><tr><th width="12%" align="left" bgcolor="#E2E2E2" class="data" scope="row"><%= relacionadas("dtnoticia") %></th><th width="88%" align="left" bgcolor="#E2E2E2" class="texto" scope="row"><a href="..."><% = relacionadas("titulo") %></a></th></tr></table><%relacionadas.MoveNextwend End if%>

Por favor, não sei mais o que fazer, já tentei de um monte de jeito e nada de funcionar corretamente.

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

o next não teria que ficar lá no final do código para que a cada passada pelo for fosse feita a pesquisa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

o next não teria que ficar lá no final do código para que a cada passada pelo for fosse feita a pesquisa?

Já tentei... não apareceu o resultado correto!Percebo que quando ele busca 1 palavra.. dá tudo ok, mas se o campo tiver 2 palavras para consultar, ele só consulta a 2 palavra.E agora?Valeu.. obrigado por enquanto!

Compartilhar este post


Link para o post
Compartilhar em outros sites

a instrucao sql q esta erradatem q ser LIKE x OR LIKE y OR LKE znao pode ser LIKE 'x,y,z'o resultado tem q vir em 1 so recordset, nao em varios... o For ... Next aí seria pra montar a string de buscaAbrazz

Compartilhar este post


Link para o post
Compartilhar em outros sites

a instrucao sql q esta erradatem q ser LIKE x OR LIKE y OR LKE znao pode ser LIKE 'x,y,z'o resultado tem q vir em 1 so recordset, nao em varios... o For ... Next aí seria pra montar a string de buscaAbrazz

Como assim Fernando?o "codigo da noticia" e o "destaque" tem q ser necessario na busca.. seeu colocar o OR ele vai pegar ou um ou outro!!!Se puder fazer a alteração no meu código vou achar bao demais!!!Abraços!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Christiano, blza?Entaum velho...funfa sim..Pois ele vai retornar qdo a noticia contiver conteudo x, ou conteudo y, ou conteudo z...Dá uma alterada pra ver como vai funfar dessa forma...Qquer coisa posta aêAbrsss

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala Christiano, blza?

 

Entaum velho...funfa sim..

 

Pois ele vai retornar qdo a noticia contiver conteudo x, ou conteudo y, ou conteudo z...

 

Dá uma alterada pra ver como vai funfar dessa forma...

 

Qquer coisa posta aê

 

Abrsss

Chuck,

 

Essa alteração por OR que vcs estao falando seria assim:

 


linenums:0'>relacionadas.Open "SELECT TOP 3 * FROM 1NOTICIA WHERE palavrachave LIKE '%" & MyArray (I) & "%' OR cod_noticia <>" & strcodnoticia & " OR destaque='s' ORDER BY cod_noticia", Conexao

Fiz desse jeito e aconteceu o que eu esperava, pegou um monte de registros.

Como disse anteriormente o cod_noticia e o destaque tem q ser um valor específico.

A consulta vai funcionar no PALAVRACHAVE.

 

Não estou entendendo, quando o campo tem 2 palavras, o código pula a 1ª palavra e busca somente a 2ª palavra... isso porque nem fiz o teste com 3 palavras.

 

e agora?

 

grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque o NEXT de seu laço FOR depois do WEND de seu Laço WHILE.

 

Testa e informe se funcionou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque o NEXT de seu laço FOR depois do WEND de seu Laço WHILE.Testa e informe se funcionou.

Salgado,Eu ja tinha feito isso antes, mas não funciona também! Quer dizer, atéq funcionar.. funciona, ele pega os registros corretos, mas não pegasomente 3 registros... pega um monte aleatoriamente, além de repetiralguns registros e além de repetir o TEXTO "Notícias relacionadas" quefica antes do while.Galera ja estou ficando doido com esse codigo, ja tentei de todo jeito e não consigo.Por favor.. me ajudem!!!Deposito R$10,00 pra quem me der uma solução... é pouco mas é o q eu posso..rs!abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O seu Next DEVE ficar após o WEND de seu laço While. A repetição do headder de sua table se deve ao fato de a mesma estar dentro de seu laço FOR, a abertura deve ser feita antes do mesmo e fechado apenas após o NEXT.

 

O problema em relação ao SELECT se deve ao fato de existir a virgula e o espaço separando os dados, e você está apenas usando o espaço em seu SPLIT. Faça essas alterações, teste e retorne informando se funcionou corretamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O seu Next DEVE ficar após o WEND de seu laço While. A repetição do headder de sua table se deve ao fato de a mesma estar dentro de seu laço FOR, a abertura deve ser feita antes do mesmo e fechado apenas após o NEXT.

 

O problema em relação ao SELECT se deve ao fato de existir a virgula e o espaço separando os dados, e você está apenas usando o espaço em seu SPLIT. Faça essas alterações, teste e retorne informando se funcionou corretamente.

Salgado,

 

Primeiramente valeu pela intenção.. mas eu ja tentei isso retirando a virgula do campo "palavrachave", e mesmo assim não dá certo.

Não entendi o que você quiz dizer com: "a abertura deve ser feita antes do mesmo e fechado apenas após o NEXT".

 

Para que vcs entendam melhor, estou disponibilizando o link deste codigo para download.

São 2 arquivos dentro do ".zip", o banco de dados e o default.asp.

 

CLIQUE AQUI PARA DOWNLOAD

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites
<%

strpalavrachave = objRS("palavrachave")
MyArray = Split(strpalavrachave," ")
strcodnoticia = objRS("cod_noticia")
%><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<th colspan="2" align="left" bgcolor="#E2E2E2" class="texto1" scope="row">Notícias relacionadas:</th>
</tr>
<%
For I=LBound(MyArray) To UBound(MyArray)

Set relacionadas = Server.CreateObject("ADODB.Recordset")

relacionadas.Open "SELECT TOP 3 * FROM 1NOTICIA WHERE LCase(palavrachave) LIKE '%" & LCase(Trim(MyArray (I))) & "%' and cod_noticia <>" & strcodnoticia & " and destaque='s' ORDER BY cod_noticia", Conexao

If NOT relacionadas.EOFthen

while Not relacionadas.EOF
%> 
<tr>
<td width="12%" align="left" bgcolor="#E2E2E2" class="data" scope="row"><%= relacionadas("dtnoticia") %></td>
<td width="88%" align="left" bgcolor="#E2E2E2" class="texto" scope="row"><a href="...">
<% = relacionadas("titulo") %>
</a></td>
</tr>
<%
relacionadas.MoveNext
wend
Next
%>
</table>
<%
End if
%>

Testa com esse código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

<%strpalavrachave = objRS("palavrachave")MyArray = Split(strpalavrachave," ")strcodnoticia = objRS("cod_noticia")%><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><th colspan="2" align="left" bgcolor="#E2E2E2" class="texto1" scope="row">Notícias relacionadas:</th></tr><%For I=LBound(MyArray) To UBound(MyArray)Set relacionadas = Server.CreateObject("ADODB.Recordset")relacionadas.Open "SELECT TOP 3 * FROM 1NOTICIA WHERE LCase(palavrachave) LIKE '%" & LCase(Trim(MyArray (I))) & "%' and cod_noticia <>" & strcodnoticia & " and destaque='s' ORDER BY cod_noticia", ConexaoIf NOT relacionadas.EOFthenwhile Not relacionadas.EOF%> <tr><td width="12%" align="left" bgcolor="#E2E2E2" class="data" scope="row"><%= relacionadas("dtnoticia") %></td><td width="88%" align="left" bgcolor="#E2E2E2" class="texto" scope="row"><a href="..."><% = relacionadas("titulo") %></a></td></tr><%relacionadas.MoveNextwendNext%></table><%End if%>
Testa com esse código.
Deu instruçao inesperada no NEXT... ai eu movi ele para depois do END IF...funcionou mas continua mostrando mais que 3 registros... e o texto NOTICIAS RELACIONADAS.. aparece sempre.. mesmo nao tendo nenhum registroachado.Mas a luz foi boa... vou estudar mais pra ve.. qualquer coisa, posto o codigo final aqui.abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse é seu código todo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse é seu código todo?

Sim Salgado, dessa parte ta todo ai. O resto é outras coisas que vai ter no site.Codigo complicado heim!!!Não entendo... estou definindo TOP 3 na busca, mas em alguns registros aparecemais de 3 resultados. Sem falar no texto "notícias relacionadas" que aparece mesmonão achando nenhum registro.

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.