Ir para conteúdo

POWERED BY:

Arquivado

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

Patrique

[Resolvido] Colocar data em separação de notícia

Recommended Posts

Fala ai pessoal.

 

Todos ai já devem ter reparado que alguns sites utilizam uma divisão entre datas para organizar as notícias no momento da apresentação ao usuário, desta forma o usuário vai saber que determinada notícia foi postado em referidos dias.

 

Tipo...

 

25/8/2010

13:51 - Teste notícia 5

12:22 - Teste notícia 4

11:10 - Teste notícia 3

11:02 - Teste notícia 2

09:14 - Teste notícia 1

24/8/2010

17:10 - Teste notícia 3

18:29 - Teste notícia 2

19:44 - Teste notícia 1

23/8/2010

11:00 - Teste notícia 3

12:29 - Teste notícia 2

15:24 - Teste notícia 1

 

Um exemplo de site que usa esta formula é o http://www.vagalume.com.br/news/ tem outros como globo, terra, uol

 

Desta forma o sistema separa as notícias dando a idéia do usuário de que data a notícia se refere ou foi postada.

 

Gostaria de saber como fazer isso em asp? já tentei buscar uma lógica aqui mais não consigo entender como fazer isso.

 

Desde já agradeço, obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será que não é usando inner join com group by data ?

Outra forma que penso aqui seria um select distinct da data e dentro do loop desse distinct um select para pegar as noticias com da data do loop.

Acho que o inner join deve resolver de forma mais eficiente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que não, pois teria que ter cálculos demasiados, isso porque na maioria das vezes é apresentado as 20 últimas notícias não importando a data, caso faço desta forma eu teria que fazer tratamentos (eu acho).

 

Estou pesquisando a respeito porém não acho nenhum material em asp.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, Desculpe se eu estiver falando besteiras...

 

Mas é que eu quero aprender também.

 

E se fize-se assim:

 

Categoria e sub-categoria

 

Categorria = DATA (28/08/2010) ordenada por data

 

Sub-categoria = NOTICIAS (13:51 - Teste notícia 5) ordenada por horario.

 

Assim você irá listar as Datas (categoria) relacionadas com as noticias (sub-categoria).

 

Por favor, me corrijam também,

 

Como disse desejo ir aprendendo mais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta arquitetado da maneira básica, da seguinte maneira.

 

idnoticia = 1

idcategoria = 6

tags = forum, imasters, patrique

datahora = 25/8/2010 16:08:02

titulo = notica teste

descricao = esta notícia...

aprovada = true

autor = 1

 

No caso o problema é que o sistema tem que apresentar um número de notícia neste caso 20, dai suponhamos que no dia 24/8/2010 tenha 2 noticias, no dia 23 não tenha nenhuma, no dia 22 tenha 10 e no dia 21 tenha 8 o sistema iria ordenar assim

 

24/8/2010

13:51 - Teste notícia 2

12:22 - Teste notícia 1

22/8/2010

13:51 - Teste notícia 10

15:27 - Teste notícia 9

14:21 - Teste notícia 8

13:17 - Teste notícia 7

12:45 - Teste notícia 6

12:34 - Teste notícia 5

12:23 - Teste notícia 4

11:40 - Teste notícia 3

10:13 - Teste notícia 2

09:21 - Teste notícia 1

21/8/2010

17:23 - Teste notícia 8

13:13 - Teste notícia 7

12:41 - Teste notícia 6

12:23 - Teste notícia 5

10:08 - Teste notícia 4

10:02 - Teste notícia 3

09:11 - Teste notícia 2

07:05 - Teste notícia 1

 

ou seja, ele ordenou as 20 últimas separando pela data, no caso se no dia 21 tivesse mais de 8 ele iria apresentar apenas as 8 pois a conta foi atingida.

 

O negocio é listar as ultimas 20 e agrupar nas datas e é nisso que não consigo pensar em uma lógica para se fazer isso.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

um select * from noticias group by data Limit 20

 

acho que um while rs("noticia") ou rs("data") (me pegou aqui hehehehhe) not eof

response.write rs("data")

response.write rs(hora) &"</td><td>"& rs("noticia")

 

ou um selet * from noticias order by data DESC;

 

Coloca um contador aqui i=0 e qdo chegar no 20 para

response.write rs("data")

response.write rs(hora) &"</td><td>"& rs("noticia")

 

Só estou meio sem saber que tipo de condicional colocar, acho que deve ser pela data, mas acho que o select precisa ser com group by data, mas nao tenho certeza de desse modo funcionará, precisaria testar com calma

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais desta forma se houver 10 notícias do dia 24/8/2010 iria colocar a data, ficando desta forma

 

24/8/2010

13:51 - Teste notícia 10

24/8/2010

15:27 - Teste notícia 9

24/8/2010

14:21 - Teste notícia 8

24/8/2010

13:17 - Teste notícia 7

24/8/2010

12:45 - Teste notícia 6

24/8/2010

12:34 - Teste notícia 5

24/8/2010

12:23 - Teste notícia 4

24/8/2010

11:40 - Teste notícia 3

24/8/2010

10:13 - Teste notícia 2

24/8/2010

09:21 - Teste notícia 1

 

E assim é mole, o problema é eliminar as datas quando não necessidade ficando assim

 

24/8/2010

13:51 - Teste notícia 10

15:27 - Teste notícia 9

14:21 - Teste notícia 8

13:17 - Teste notícia 7

12:45 - Teste notícia 6

12:34 - Teste notícia 5

12:23 - Teste notícia 4

11:40 - Teste notícia 3

10:13 - Teste notícia 2

09:21 - Teste notícia 1

 

hhehehe o negócio complicado hehehehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

e se fizer assim:

 

select distinct data

...

while not rs.eof

response.write rs("data")

select * from noticias where data="&rs("data")

while not rs1.eof

response.write rs1("hora") &" "& rs1("noticia")

...

 

o problema seria os 20 registros, mas talvez se colocar um contador que se incrementa depois do rs1("hora") tipo

i=i+1

acho que funcione.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que darei dois selects nesse caso, acho eu que deva ter uma forma de tirar a data de um response.write dentro do for por exemplo, ou seja, manter apenas uma data, caso a seguinte se repita ele não adiciona, através de if ou case.

 

Mais vou tentar outras formas e qualquer coisa posto o resultado aqui.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apenas uma dica: While dentro de While...

Faça um SELECT ordenada pela data da noticia.. e utilize dois whiles para fazer isso do jeito que você deseja....

 

Att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dark, não entendi, eu utilizaria dois whiles mais como eu faria para apresentar apenas uma descrição da data, e em seguida quando houver outra data, data apenas 1 da outra e assim por diante.

 

Isso ta complicado pra rai rsrsrs não consigo ver uma lógica pra isso funfar, porém eu sei que tem, mas não consigo entender.

 

Se puder dar mais detalher ai darkdemo eu agradeço.

 

Valew.

 

To tentando assim mais não ta indo :/

 

<% 
ConexaoDB("noticias.mdb") 

Set RS = Conexao.Execute("SELECT TOP 20 * FROM tbl_noticias Order by dataehora") 

Response.Write("<strong>Notícias</strong>")
Response.Write("<br /><br />")

If not RS.EOF Then
    While not RS.EOF

        vId = RS("id")
        vIdCategoria = RS("idcategoria")
        vTags = RS("tags")
        vTitulo = RS("titulo")
        vDescricao = RS("descricao")
		
        vDataeHora = RS("dataehora")

        vDiaData = Day(vDataeHora)
        vMesData = Month(vDataeHora)
        vAnoData = Year(vDataeHora)
		
        vDataJunta1 = vDiaData & vMesData & vAnoData
        vDataJunta2 = vDiaData & vMesData & vAnoData
		
        Do Until vDataJunta1 = vDataJunta2
             Response.Write vDataeHora
             vDataJunta2 = vDataJunta2 + 1
        Loop

        Response.Write(vTitulo)
        Response.Write("<br />")

    RS.Movenext
    Wend
End if

RS.Close
Set RS = Nothing

Conexao.Close
Set Conexao = Nothing 
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rs1 = bla bla bla

While NOT Rs1.EOF

Response.Write(Rs1("data"))

Rs2 = bla bla bla

While NOT Rs2.EOF

Response.Write(Rs2("Titulo"))

Rs2.MoveNext

Wend

Rs1.MoveNext

Wend

 

 

É só colocar a cabeça pra pensar um pouco.. =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é dark rsrsrsr to quebrando.

 

Na sua solução seria necessário criar mais de um select para montar isso, mais esse é o caso, estou procurando uma solução aonde não seja necessário fazer mais de 1 select, tenho certeza que isso seja possível porém não to conseguindo bolar uma função para isso.

 

Mais agradeço sua intenção em ajudar, obrigado.

 

Vou continuar tentando aqui, se conseguir posto aqui.

 

Valew.

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT * FROM tabela ORDER BY data
While
If Data <> Rs("data") Then
Response.Write(Data)
End if
Response.Write(Rs("Titulo"))
Data = Rs("Data")
Rs.MoveNext
Wend

 

Att;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ops, clareou a mente rsrsrsrsrs

 

O seu estava embaralhando e não colocava a primeira data, porém deu para eu sacar o que você estava me passando e finalmente consegui a lógica da coisa rsrsrsrsrs

 

Ficou assim

 

Set RS = Conn.Execute("SELECT * FROM tbl_noticias ORDER BY dataehora") 

Response.Write("<strong>Notícias</strong>")
Response.Write("<br /><br />")

While NOT RS.EOF

vDataeHora = RS("dataehora")
vSerial = Day(vDataeHora) & Month(vDataeHora) & Year(vDataeHora)   

   If vSerial = vMateria Then
       Response.Write(RS("titulo"))
       Response.Write("<br />")
   Else
       Response.Write(RS("dataehora"))
       Response.Write("<br />")
       Response.Write(RS("titulo"))
       Response.Write("<br />")
       vMateria = Day(vDataeHora) & Month(vDataeHora) & Year(vDataeHora)
   End If

Rs.MoveNext
Wend

Anteriormente estava tentando fazer utilizando o if como sugerido por ti, porém estava cometendo o equivoco e colocando as variáveis de conexão fora do while, com isso não dava certo mesmo kkkkkk

 

Mas agora foi belezinha, obrigado ai pela ajuda.

 

Aos que quiserem, tai o code, só organizem, pois como tava com pressa acabei fazendo de qualquer maneira, só para teste por isso não organizei ele belezinha, mais ta ai pra quem tiver a mesma dúvida.

 

TÓPICO RESOLVIDO.

 

[]'S

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.