Ir para conteúdo

POWERED BY:

Arquivado

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

©JOÃO GABRIEL MARQUES

Agrupar registros por data

Recommended Posts

Olá a todos!

 

Estou com uma dúvida relativamente simples: 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 3 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 tem alguma idéia de como resolver isso?? Tô postando aqui no fórum do PHP porque em relação ao MySQL o uso da cláusula GROUP BY não trouxe o resultado esperado...

 

 

Valeuu!

Compartilhar este post


Link para o post
Compartilhar em outros sites

E como não tem nada haver com PHP, estou movendo...

Movido: PHP=>SQL

Compartilhar este post


Link para o post
Compartilhar em outros sites

O Campo data tem data e hora ou só data ?

 

Um order by desc resolve , mas o objeto de exibição e que faz o agrupamento.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que ele quer dizer é que cabe a você organizar sua página para que a data só apareça uma vez... para qualquer sql que fizer usando por exemplo uma data e uma descrição, a data aparecerá em cada linha de retorno do sql, isto é fato. Se quer que ela seja exibida uma única vez, você terá que montar sua página no braço. Por exemplo, digamos que sua select fosse esta:

 

Select data, noticia from noticias order by data desc

O retorno dela seria algo do tipo:

 

data			 noticia
07-12-2008   XXXXXXX
07-12-2008   YYYYYYYY
06-12-2008   ZZZZZZZ

Logo, cabe a você na sua página fazer o código para tratar o retorno da consulta e o exibir como deseja. Não basta simplesmente jogar o resultado da consulta numa table por exemplo, porque isso não vai eliminar a duplicação da data. O que terá que fazer é gerar no braço o código e controlar tudo na montagem da página dinamicamente, colocando cada informação no lugar que deseja.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É preciso isolar as partes de um problema para se buscar a solução. Neste tópico, deve haver questões de SQL, PHP, HTML, etc. João, a questão do SQL foi resolvida ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu acho q o problema esta nos conceitos da cabeça dele , pois ele quer agrupar algo q na verdade ele precisa apenas ordenar, agrupar eh transformar mtos em um soh, enquanto que ordenar eh colocar perto aqueles q sao parecidos... isso eu acho q travou a mente dele rs

 

 

bom vamo ver o q ele responde neh :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

A do SQL foi resolvida faz tempo...já me disseram que o meu problema está na forma como exibir os dados, cheguei à conclusão que o problema está no PHP...já postei essa dúvida lá no fórum do PHP mas moveram para cá de novo...em relação à consulta SQL, a solução é usar o ORDER BY, como eu já faço há tempos...o que preciso saber é como exibir os dados do jeito que eu quero manipulando-os por intermédio do PHP.

 

Alguém poderia mover isso para o PHP?

Compartilhar este post


Link para o post
Compartilhar em outros sites

o GROUP BY

 

ele serve exatamente para agrupar dados e pela pergunta é exatamente isso que precisa fazer

 

select * from tabela GROUP BY data

 

assim se tiver varias noticias no mesmo dia aperecerá apenas 1 dia pra todas as noticias

 

dai pra mostrar outros dados precisa agrupar tbm senao da erro, por exemplo você quer mostrar as datas em grupo e a quantidade de noticias

 

sum(quantidade) as total

 

e por ai vai, tem que usar o group by mesmo, mas se nao souber agrupar o resto dos campos vai dar erro mesmo

 

Então, é só data mesmo...uso data e hora separados para um melhor controle da exibição desses itens na página.

 

uma pergunta você nao ta usando tipo de campo certo para guardar as datas?

 

se tiver usando tipo de campo de texto, varchar , etc..., ja te adianto que você ta fazendo gambiarra

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aleluia! Até que enfim alguém me deu uma resposta significativa e cabível para um problema que imagino ser bastante simples...

 

É isso mesmo que eu quero Fabyo...para o campo DATA estou usando o tipo de dados DATE, e para a hora (o que não é o caso), uso o TIME...não usei neste caso o DATETIME porque tem páginas que quero exibir só a data ou só a hora, então quando se trata de notícias eu sempre insiro separado...uso o DATETIME em tabelas de logs, por ex, para registrar a data e hora que um usuário efetuou o login no site...mas voltando...

 

Quando você diz que eu tenho que agrupar os outros campos também, quais campos seriam? Na consulta SQL, eu tô trazendo todos os campos da tabela de notícias (id, data, hora, creditos, titulo, resumo, texto etc.). Minha consulta tá assim:

 

SELECT * FROM noticias_textos GROUP BY data ORDER BY data DESC, hora DESC

Explicando: agrupa por datas e ordena por datas em ordem decrescente e, por hora, também decrescente, para que, quando houver mais de 1 notícia da mesma data, o 2º parâmetro de ordenação seja pela hora, trazendo assim as mais recentes primeiro...

 

Mtoooooooo obrigadoo pela resposta inicial...!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe a demora, mas nao sei porque nao recebi email de resposta desse topico

 

entao só uma dica você pode usar o campo datetime e formatar a data para aparecer do jeito que quiser, só a data ou só a hora, só o mes, tanto faz

 

você pode formatar na propria consulta usando o date_format exemplo:

 

SELECT DATE_FORMAT( data, '%d/%m/%Y' ) AS DATA FROM tabela

 

http://dev.mysql.com/doc/refman/5.0/en/dat...ion_date-format

 

Mostra só o mês:

 

SELECT month( data ) AS DATA FROM tabela

 

Mostra só o dia:

 

SELECT day( data ) AS DATA FROM tabela

 

e sobre o Group By, como falei você tem que agrupar todos os campos

vai testando devagar ate você arrumar tudo por exemplo comece só pelo campo data e depois vai acrescentando outros campos e agrupando tbm

 

SELECT data FROM noticias_textos GROUP BY data ORDER BY data DESC, hora DESC

 

SELECT data, hora FROM noticias_textos GROUP BY data, hora ORDER BY data DESC, hora DESC

 

dependendo do tipo de campo você vai precisar somar usando sum()

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ae amigão,

 

Usa isso aqui:

 

<?php

$conexao = mysql_connect("localhost", "root", "123456");
mysql_select_db("teste", $conexao);
	
	$buscasql = mysql_query("
		SELECT *, DATE_FORMAT(data, '%d/%m/%Y') AS data,
			   DATE_FORMAT(hora, '%H:%i') AS hora
		FROM noticias
		ORDER BY data DESC, hora DESC
	") or die(mysql_error());
	
	
	$lastDate = '';
	
	while ($rs = mysql_fetch_assoc($buscasql)) {
	
		if ($rs['data'] != $lastDate) {
			print "- {$rs['data']}<br />";
		}
		
		print "{$rs['hora']} - {$rs['titulo']}<br />";

		$lastDate = $rs['data'];
	}

?>

Altere da maneira que desejar!

 

Abraços

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.