Ir para conteúdo

POWERED BY:

Arquivado

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

Marcel Sartori

[Resolvido] Agrupar registros por data ao listar

Recommended Posts

Olá galera... tô quebrando a cabeça aqui, e não tô conseguindo fazer uma coisa aqui...

 

É o seguinte:

 

Tenho um banco de dados com várias notícias (37.000 e poucas para dar uma "profundidade").

Todas estas notícias, são cadastradas com uma data e hora específicas...

O Que não estou conseguindo fazer é listar as notícias por data.

 

 

<!--- ----------------------------------------------------------- --->

Exemplo da página de listagem:

 

25/02/2010 - Quinta-Feira

10:00 - Notícia inserida as 10:00 do dia 25/02

11:00 - Notícia inserida as 11:00 do dia 25/02

12:00 - Notícia inserida as 12:00 do dia 25/02

13:00 - Notícia inserida as 13:00 do dia 25/02

14:00 - Notícia inserida as 14:00 do dia 25/02

 

24/02/2010 - Quarta-Feira

10:00 - Notícia inserida as 10:00 do dia 24/02

11:00 - Notícia inserida as 11:00 do dia 24/02

12:00 - Notícia inserida as 12:00 do dia 24/02

13:00 - Notícia inserida as 13:00 do dia 24/02

14:00 - Notícia inserida as 14:00 do dia 24/02

 

23/02/2010 - Terça-Feira

10:00 - Notícia inserida as 10:00 do dia 23/02

11:13 - Notícia inserida as 11:13 do dia 23/02

 

<!--- ----------------------------------------------------------- --->

 

Sei que devo utilizar laços para gerar isso:

 

for ($i=0, $i>=$total_resultados_query, $i++) {
   $data_laco = '';
   //Para rodar a primeira vez, devo pegar a data do primeiro registro
   if (data_laco == '') {
      $data_laco = $data_noticia;//recebe a data da notícia do laço
   if (data_laco == $data_noticia) {
      //escrevo aqui, os dados da tabela que exibe os resultados da mesma data
   } else {
      // Como rodar novamente? ou devo usar while?
   }
}//fecho o for

Alguém pode ajudar? Tô precisando muito mesmo gente!

 

Valeu, desde já agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

você está repetindo a mesma coisa em todas as voltas do laço, as variáveis $data_laco e $data_noticia não mudam a ca da volta. e esse $i>=$total_resultados_query, com ceteza é assim $i<=$total_resultados_query, observe a mudança do > para <

 

como que é a tabela que você extrai os dados??? as colunas??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá galera... tô quebrando a cabeça aqui, e não tô conseguindo fazer uma coisa aqui...

 

É o seguinte:

 

Tenho um banco de dados com várias notícias (37.000 e poucas para dar uma "profundidade").

Todas estas notícias, são cadastradas com uma data e hora específicas...

O Que não estou conseguindo fazer é listar as notícias por data.

 

 

<!--- ----------------------------------------------------------- --->

Exemplo da página de listagem:

 

25/02/2010 - Quinta-Feira

10:00 - Notícia inserida as 10:00 do dia 25/02

11:00 - Notícia inserida as 11:00 do dia 25/02

12:00 - Notícia inserida as 12:00 do dia 25/02

13:00 - Notícia inserida as 13:00 do dia 25/02

14:00 - Notícia inserida as 14:00 do dia 25/02

 

24/02/2010 - Quarta-Feira

10:00 - Notícia inserida as 10:00 do dia 24/02

11:00 - Notícia inserida as 11:00 do dia 24/02

12:00 - Notícia inserida as 12:00 do dia 24/02

13:00 - Notícia inserida as 13:00 do dia 24/02

14:00 - Notícia inserida as 14:00 do dia 24/02

 

23/02/2010 - Terça-Feira

10:00 - Notícia inserida as 10:00 do dia 23/02

11:13 - Notícia inserida as 11:13 do dia 23/02

 

<!--- ----------------------------------------------------------- --->

 

Sei que devo utilizar laços para gerar isso:

 

for ($i=0, $i>=$total_resultados_query, $i++) {
   $data_laco = '';
   //Para rodar a primeira vez, devo pegar a data do primeiro registro
   if (data_laco == '') {
      $data_laco = $data_noticia;//recebe a data da notícia do laço
   if (data_laco == $data_noticia) {
      //escrevo aqui, os dados da tabela que exibe os resultados da mesma data
   } else {
      // Como rodar novamente? ou devo usar while?
   }
}//fecho o for

Alguém pode ajudar? Tô precisando muito mesmo gente!

 

Valeu, desde já agradeço!

 

Tenta acompanhar essa lógica

<?php

  //aqui inicia o laço {
     $exibedata = "";
     $data = "resultado da query";
     if($exibedata != $data) {
       echo $data;
       $exibedata = $data;
     }
     // aqui entra a notícia
   }// aqui termina o laço
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

E aí galera, fiz conforme o pessoal me indicou, mas não consegui.

Ele não tá percorrendo toda a consulta... (30 resultados do LIMIT da query)

Ele também não exibiu os dados corretamente, exibe sempre o primeiro.

 

O Código que fiz, segundo a ajuda do pessoal tá logo abaixo:

 

<?php require_once('Connections/ConectaDB.php'); ?>
<?php
//Conexão ao banco
mysql_select_db($database_ConectaDB, $ConectaDB);
$query_recNoticias = "SELECT * FROM noticias ORDER BY not_id DESC LIMIT 0,30";
$recNoticias = mysql_query($query_recNoticias, $ConectaDB) or die(mysql_error());
$row_recNoticias = mysql_fetch_assoc($recNoticias);
$totalRows_recNoticias = mysql_num_rows($recNoticias);

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<?php
// início do laço
	for ($i<0; $i<=$totalRows_recNoticias; $i++) {
		$exibedata = "";
		$data = $row_recNoticias['not_hora'];
			if($exibedata != $data) {
				echo $data;
				$exibedata = $data;
		     }?>
  <table width="100%" border="0" cellspacing="0" cellpadding="6">
    <tr>
      <th width="160" scope="col"><?php echo date('d/m/Y H:i', strtotime($row_recNoticias['not_hora'])); ?></th>
      <th align="left" scope="col"><?php echo $row_recNoticias['not_titulo']; ?></th>
    </tr>
  </table>

<?php 		   }// aqui termina o laço
?>
</body>
</html>
<?php
mysql_free_result($recNoticias);
?>

Alguém tem alguma luz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testa aí para ver se funciona:

 

<?php require_once('Connections/ConectaDB.php');

//Conexão ao banco
mysql_select_db($database_ConectaDB, $ConectaDB);

$query_recNoticias = "SELECT * FROM noticias ORDER BY not_id DESC LIMIT 0,30";
$recNoticias = mysql_query($query_recNoticias, $ConectaDB) or die(mysql_error());


?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<?php
// início do laço
	while ($row = mysql_fetch_assoc($recNoticias)){
		$exibedata = "";
		$data = $row['not_hora'];
		if($exibedata != $data) {
	           echo $data;
		   $exibedata = $data;
		}
?>
  <table width="100%" border="0" cellspacing="0" cellpadding="6">
    <tr>
      <th width="160" scope="col"><?php echo date('d/m/Y H:i', strtotime($row['not_hora'])); ?></th>
      <th align="left" scope="col"><?php echo $row['not_titulo']; ?></th>
    </tr>
  </table>

<?php 		   
   }// aqui termina o laço
?>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Testa aí para ver se funciona:

 

<?php require_once('Connections/ConectaDB.php');

//Conexão ao banco
mysql_select_db($database_ConectaDB, $ConectaDB);

$query_recNoticias = "SELECT * FROM noticias ORDER BY not_id DESC LIMIT 0,30";
$recNoticias = mysql_query($query_recNoticias, $ConectaDB) or die(mysql_error());


?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<?php
// início do laço
	while ($row = mysql_fetch_assoc($recNoticias)){
		$exibedata = "";
		$data = $row['not_hora'];
		if($exibedata != $data) {
	           echo $data;
		   $exibedata = $data;
		}
?>
  <table width="100%" border="0" cellspacing="0" cellpadding="6">
    <tr>
      <th width="160" scope="col"><?php echo date('d/m/Y H:i', strtotime($row['not_hora'])); ?></th>
      <th align="left" scope="col"><?php echo $row['not_titulo']; ?></th>
    </tr>
  </table>

<?php 		   
   }// aqui termina o laço
?>
</body>
</html>

Oi Felipe, eu fiz aqui, e consegui listar as notícias, tudo certinho, mas ela não agrupa. Eu de porpósito inseri o mesmo regitro 2 vezes, mesma data e hora, mas nem assim agrupou.

 

<!-- Aqui em baixo é a cópia da página de listagem que consegui: -->

2010-02-24 01:54:26

24/02/2010 01:54 Título da Notícia

 

2010-02-24 01:54:26

24/02/2010 01:54 Título da Notícia

 

2010-01-19 05:06:00

19/01/2010 05:06 Farmácia de plantão hoje em Amambai, Drogaria Toledo

 

2010-01-19 02:34:00

19/01/2010 02:34 Conselho Tutelar de Amambai: Plantão de hoje, dia 19

 

2010-01-19 00:29:00

19/01/2010 00:29 Plantão da Sanesul em Amambai: Fone-8408-9018

 

2010-01-18 21:11:00

18/01/2010 21:11 Rudi e Senador Valter Pereira inauguram Posto na Vila Dalva

 

2010-01-18 23:20:00

18/01/2010 23:20 Ministério da Saúde cadastra voluntários para ajuda ao Haiti

 

2010-01-18 21:09:00

18/01/2010 21:09 Cultura recebe instrumentos para Banda Sinfônica

 

2010-01-18 22:07:00

18/01/2010 22:07 PT ameaça pedir cargos federais se Puccinelli apoiar Serra

 

2010-01-18 20:31:00

18/01/2010 20:31 Receita amplia atendimento para incluídos na malha fina

 

2010-01-18 12:38:00

18/01/2010 12:38 Construção de um novo hospital é meta em Sapucaia

 

2010-01-18 19:08:00

18/01/2010 19:08 Jutí abriu hoje inscrição para o concurso público

 

2010-01-18 11:16:00

18/01/2010 11:16 Carro de Amado Batista pega fogo em rodovia de Goiás

 

2010-01-18 18:03:00

18/01/2010 18:03 Inscrição ao vestibular a distância da Unigran vai até quinta

 

2010-01-18 17:02:00

18/01/2010 17:02 Anvisa interdita amendoim com tóxicos superiores ao permitido

 

2010-01-18 16:06:00

18/01/2010 16:06 Agesul publica licitação de obras do PAC em seis municípios

 

2010-01-18 15:03:00

18/01/2010 15:03 2ª fase de pré-matrícula em escola estadual vai até o dia 29

 

2010-01-18 11:01:00

18/01/2010 11:01 Receita libera consulta a lote da malha fina de 2007

 

2010-01-18 14:09:00

18/01/2010 14:09 Consulta pública sobre rastreabilidade termina amanhã

 

2010-01-18 13:04:00

18/01/2010 13:04 Juros do cheque especial têm leve alta em janeiro

 

2010-01-18 12:05:00

18/01/2010 12:05 PMDB de Sapucaia também recepcionou senador Valter Pereira

 

2010-01-18 11:01:00

18/01/2010 11:01 SEMAI promove cursos de sabão e reaproveitamento

 

2010-01-18 10:04:00

18/01/2010 10:04 Concurso da Sanesul oferece 182 vagas até quarta

 

2010-01-18 09:06:00

18/01/2010 09:06 Acusado de estupro é preso com arma artesanal

 

2010-01-18 07:57:00

18/01/2010 07:57 Índia de 15 anos é gravemente ferida a facadas

 

2010-01-18 05:40:00

18/01/2010 05:40 Previsão de pancadas de chuva forte em todo Estado

 

2010-01-18 05:28:00

18/01/2010 05:28 Veja a previsão do horóscopo para hoje, 18 de janeiro

 

2010-01-18 08:00:00

18/01/2010 08:00 INSS abre hoje inscrições de concurso com vagas em MS

 

2010-01-17 20:45:00

17/01/2010 20:45 Confira os resultados dos confrontos da 1ª rodada do Carioca 2010

 

2010-01-17 20:38:00

17/01/2010 20:38 Veja os resultados da 1ª rodada do Paulistão 2010

 

<!-- Fim da Página de listagem -->

 

Ele tá exibindo a hora, e data, mas precisava que agrupasse pelo dia. Exemplo:

 

2010-02-24

01:54 Título da Notícia

01:54 Título da Notícia

 

Será que tem como? Agrupar pelo dia, ignorando a data?

Compartilhar este post


Link para o post
Compartilhar em outros sites

agrupar por data na query n vai ter jeito porque se tratam de datas diferentes, mas na exibição dá pra fazer alguma coisa, manda os nomes da colunas da tabela noticias

 

--

-- Estrutura da tabela `noticias`

--

 

CREATE TABLE IF NOT EXISTS `noticias` (

`not_id` int(11) NOT NULL auto_increment,

`not_edicao` int(11) default NULL,

`not_hora` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,

`not_tipo` int(11) default NULL,

`not_titulo` text collate latin1_general_ci,

`not_cidade` int(11) default NULL,

`not_titulo_destaque` char(1) collate latin1_general_ci default NULL,

`not_legenda` text collate latin1_general_ci,

`not_corpo` text collate latin1_general_ci,

`not_texto_destaque` text collate latin1_general_ci,

`not_fonte` varchar(50) collate latin1_general_ci default NULL,

`not_usuario` varchar(20) collate latin1_general_ci default NULL,

`not_chapeu` varchar(120) collate latin1_general_ci default NULL,

`not_subtitulo` text collate latin1_general_ci,

`not_credito` varchar(50) collate latin1_general_ci default NULL,

`not_furo` char(1) collate latin1_general_ci default NULL,

`not_total_leituras` int(11) NOT NULL,

PRIMARY KEY (`not_id`),

FULLTEXT KEY `not_credito` (`not_credito`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci PACK_KEYS=0 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=38304 ;

 

Desculpa a ignorância, mas não dá para fazer um while depois que mostra a data atual do laço?

 

for....

while ($data_noticia = $data_atual_laco) {
    $not_hora - $not_titulo;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui agrupar as notícias, mas agora precisava saber com faço para mostrar todas as notícias de mesma data no while

 

<?php require_once('Connections/conectaDBVelho.php');

//Conexão ao banco
mysql_select_db($database_conectaDBVelho, $conectaDBVelho);

$query_recNoticias = "SELECT * FROM noticias ORDER BY not_id DESC LIMIT 0,30";
$recNoticias = mysql_query($query_recNoticias, $conectaDBVelho) or die(mysql_error());


?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<?php
// início do laço
    $exibedata = "";
	while ($row = mysql_fetch_assoc($recNoticias)){
                $data = date('d/m/Y', strtotime($row['not_hora']));
                if($exibedata != $data) {
                   $exibedata = date('d/m/Y', strtotime($row['not_hora'])); ?>
  <table width="100%" border="0" cellspacing="0" cellpadding="6">
    <tr>
      <th align="left" scope="col"><?php echo $exibedata; ?></th>
    </tr>
  </table>
<?php 				   					
						while ( $exibedata == $data ) {			  				
					?>
				   
	<table width="100%" border="0" cellspacing="0" cellpadding="6">
    <tr>
      <th width="160" scope="col"><?php echo date('H:i', strtotime($row['not_hora'])); ?></th>
      <th align="left" scope="col"><a href="codigo?<?php echo $row['not_id']; ?>"><?php echo $row['not_titulo']; ?></a></th>
    </tr>
  </table>
			   
<?            break;  } 
				}
?>
  
<?php              
	}// aqui termina o laço
?>
</body>
</html>

 

O resultado deste código foi:

 

24/02/2010

01:54 Título da Notícia

 

19/01/2010

05:06 Farmácia de plantão hoje em Amambai, Drogaria Toledo

 

18/01/2010

21:11 Rudi e Senador Valter Pereira inauguram Posto na Vila Dalva

 

17/01/2010

20:45 Confira os resultados dos confrontos da 1ª rodada do Carioca 2010

 

mas existem mas notícias nestes dias... fiz ele com o while... será que tenho que colocar um for?

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha se isso quebra o seu galho

 

<?php
 require_once('Connections/ConectaDB.php'); //Conexão ao banco
 mysql_select_db($database_ConectaDB, $ConectaDB);
 $query_recNoticias = "select *,cast(not_hora as DATE) as data, cast(not_hora as TIME) as hora from noticias ORDER BY not_id DESC LIMIT 0,30";
 $recNoticias = mysql_query($query_recNoticias) or die(mysql_error());
 ?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml"><body>
 <?php
 $exibedata = "";
 // início do laço 
 while ($row = mysql_fetch_array($recNoticias)){
	if ($exibedata==$row['data']){
		echo "<tr><td>".$row['hora']."-".$row['not_titulo']."</td></tr>";	
	}
	else if(exibedata==""){
		echo $row['data']."<br>";
		$exibedata=$row['data'];
		echo "<table><tr><td>".$row['hora']."-".$row['not_titulo']."</td></tr>";	
	}
	else{
		echo "</table>";
		echo $row['data']."<br>";
		echo "<table><tr><td>".$row['hora']."-".$row['not_titulo']."</td></tr>";	
		$exibedata=$row['data'];
	}
}	
 ?>
 </html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito Obrigado Gente!!!

 

Deu certo com o código acima...

 

 

Deixo aqui meus sinceros agradecimentos a todos o Fórum, e em especial ao Quelipe e ao Victor Cometti (em odem alfabética). Muito Obrigado mesmo!!!

 

Valeu Galera, Deus abençoe a todos, e sucesso!!!

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.