Ir para conteúdo

POWERED BY:

Arquivado

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

©JOÃO GABRIEL MARQUES

Agrupar registros

Recommended Posts

Olá a todos!

 

Estou com uma dúvida em relação à cláusula GROUP BY. Tenho uma tabela de notícias e estou fazendo um select para recuperar todos os registros, mas quero que a lista de notícias seja exibida na página de maneira que as notícias fiquem agrupadas por datas, isto é, se tem 2 notícias do mesmo dia, a data correspondente deve aparecer apenas 1 vez. Tentei usar a cláusula GROUP BY mas tá dando erro: na página só aparece 1 registro daquela data, mesmo que existam outros.

 

Alguém sabe como resolver esse problema? Ou existe outra forma de se fazer isso sem ser pelo GROUP BY?

 

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, minha query tá assim:

 

SELECT * FROM noticias GROUP BY data DESC ORDER BY hora DESC

Tenho 2 notícias do dia 30/11/2008 e 1 notícia do dia 16/11/2008. Aí na página aparece assim:

 

30/11/2008

- Notícia aqui

 

16/11/2008

- Notícia aqui

 

 

Deveria aparecer 2 notícias na data 30/11/2008:

 

30/11/2008

- Notícia aqui

- Notícia aqui

 

16/11/2008

- Notícia aqui

 

 

Resumindo: se houver mais de 1 notícia publicada na mesma data, a data deve aparecer 1 vez só, ao invés da data aparecer em cada registro retornado da query.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E aí giesta...beleza? Desculpe perguntar mas, não entendi esse código que você postou. O que é o que aí e onde ele deve ser inserido? Qual a lógica dele?

 

Dá uma olhada na página a seguir pra você entender o que eu quero:

http://www1.folha.uol.com.br/folha/bichos/noticias-2.shtml

 

Veja que todas as notícias de uma data ficam agrupadas, e essa data só aparece 1 vez no topo da lista, e quando existe um novo grupo de notícias de outra data, aí a data é mostrada, novamente 1 única vez...

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok.. vamos la.... (apesar deu discordar da sua forma de exibir as coisas na pagina, nao soh eh desagradavel caso hajam mtas noticias no mesmo dia como tambem gera um codigo desnecessario)

 

partindo do principio q sua tabaela tem pelo menos dois campos: dia(dia da noticia) e noticia(a noticia em si eu gero o codigo abaixo:

 

set @a:='0';

select if(dia = @a, NULL ,@a:=dia) ,noticia from tabela order by dia

 

 

ele começa dizendo set @a:='0'; (basicamente startando a variavel @a e definindo ela como zero)

depois

select (if dia = @a, NULL, @a:=dia)

se o campo dia da linha sendo processada for igual a variavel @a entao nao coloque nada (NULL), caso contrario coloque o campo dia e defina @a como o campo dia (@a:=dia)

depois ele imprime o campo noticia(noticia)

isso claro sendo ordenado pelo campo dia

 

entao teriamos um resultset assim:

 

12/02/2008 A

(VAZIO) B

(VAZIO) C

13/03/2008 D

(VAZIO) E

14/03/2008 F

 

 

Caso utilizassemos uma tabela assim:

 

12/02/2008 A

12/02/2008 B

12/02/2008 C

13/03/2008 D

13/03/2008 E

14/03/2008 F

 

agora onde colocar isso?

simples

 

$query = mysql_query("

set @a:='0';

select if(dia = @a, NULL ,@a:=dia) ,noticia from tabela order by dia

");

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.