Ir para conteúdo

POWERED BY:

Arquivado

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

Leandro Givisiez

Listar registros por data

Recommended Posts

Boa noite!

Tentei seguir a dúvida anterior do nosso amigo, mas não consegui resolver o meu problema que é o mesmo.

Tenho uma coluna menu de histórico, onde lista as datas referente aos artigos inseridos. Ex: 15/06/2001, 16/06/2011.

 

Estou com dificuldades em listar os artigos de cada dia.

 

/////////////// abaixo Código da coluna lateral (menu com as datas)

<?php
$sql2 = "SELECT * FROM noticias WHERE habilita = '1' ORDER BY data DESC";

$resultado2 = mysql_query($sql2) 
or die ("Não foi possível realizar a consulta");
if (@mysql_num_rows($resultado2) == 0)
  die('Nenhum registro encontrado');

while ($linha2=mysql_fetch_array($resultado2))
{
$novadata = substr($linha2['data'],8,2) . "/" .  substr($linha2['data'],5,2) . "/" . substr($linha2['data'],0,4);			
			 echo"<li style=\"padding-left:5px;\"><img src=\"images/breadcrumb-seta.gif\" width=\"9\" height=\"7\"> <a href=\"noticias-listar.php?data={$linha2['data']}\" style=\"color:#333!important;\" title=\"{$linha2['titulo']}\">$novadata</a></li>";									


}

?>

///////////////////////////////////

 

/////// abaixo lista todas os artigos referente ao dia ///////////////

 

<?php


$sql = "SELECT * FROM noticias WHERE data = ".$_GET['data']." " ; // resgata da URL ?

$resultado = mysql_query($sql) or die ("Não foi possível realizar a consulta");
if (@mysql_num_rows($resultado) == 0)die('Nenhum registro encontrado');


$exibedata = "";
 while ($linha = mysql_fetch_array($resultado)){
       if ($exibedata== $linha['data']){

	echo "<ul>";
               echo "<li><p> <a href='noticias-ler.php?id={$linha['id']}'  title='".$linha['titulo']."'>". $linha['titulo']. "</a></p></li>";
	echo "<li><p>{$linha['resumo']}</p></li>"; 
	echo "</ul>";
       }

       else{
           echo"erro"; 
    break;
       }


}       
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Leandro,

 

Nâo entendi exatamente o seu problema. Os resultados não estão aparecendo na ordem que você quer?

Se sim, faça um while e imprima os resultados para validar o retorno e ver se está tudo ok.

 

Detalhe: preste atenção neste trecho de código:

 

$exibedata = "";
while ($linha = mysql_fetch_array($resultado)){
if ($exibedata== $linha['data']){
	...        
} else {
	echo"erro"; 
	break;
}

 

Em um primeiro momento você atribiu "" para a variável $exibedata:

$exibedata = "";

Depois você tem a seguinte validação dentro do seu while:

if ($exibedata== $linha['data']){

Tipo, se você está atribuindo "" para sua variável $exibedata e logo em seguida está fazendo uma validação nesta mesma variável, você nunca entrará em seu if, pois ela jamais será igual a $linha['data'] ok?

 

Tente alterar este trecho e veja o que acontece. Lembre-se de deixar habilitado a opção para exibir os notices e warnings, pode ser que ajude.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Jader, primeiramente obrigado pela iniciativa.

 

Vamos lá! Eu fiquei bastante perdido nessa parte.

Imagine um blog, onde existe dezenas de artigos listados e uma coluna lateral de histórico data/mês para o usuário acessar os artigos anteriores.

O que quero fazer é exatamente isso, um histórico listado por Mês, quando o internauta clicar no mês X vai listar todos os artigos relacionados a esse mês. Entendeu? Estou tentando achar um caminho para que eu possa fazer.

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

SET lc_time_names = "pt_BR";
SELECT DISTINCT MONTH( NOW( ) ) AS mes, DATE_FORMAT( NOW( ) , '%M de %Y' ) AS nova_data FROM noticias;

# mude o NOW( ) para o nome da coluna que contém a data
# o mes você usa no link para buscar por mês
# junho de 2011

Compartilhar este post


Link para o post
Compartilhar em outros sites


SET lc_time_names = "pt_BR";
SELECT DISTINCT MONTH( NOW( ) ) AS mes, DATE_FORMAT( NOW( ) , '%M de %Y' ) AS nova_data FROM noticias;

# mude o NOW( ) para o nome da coluna que contém a data
# o mes você usa no link para buscar por mês
# junho de 2011

 

Opa Consegui! Obrigado.

Ficou assim:

<?php  
mysql_query( 'SET lc_time_names = "pt_BR"');
$sql2 = ("SELECT DISTINCT MONTH( data ) AS mes, DATE_FORMAT( data , '%M de %Y' ) AS nova_data FROM noticias ORDER BY data DESC");
$resultado2 = mysql_query($sql2) or die ("Não foi possível realizar a consulta");
if (@mysql_num_rows($resultado2) == 0) die('Nenhum registro encontrado');

while ($linha2=mysql_fetch_array($resultado2)){
echo"<li><img src=\"images/breadcrumb-seta.gif\" width=\"9\" height=\"7\"> <a href=\"?mes={$linha2['mes']}\" title=\"{$linha2['nova_data']}\"><strong>{$linha2[ 'nova_data' ]}</strong></a> (3)</li>";
 } 

?>

 

Agora surgiu ooooutra dúvida.

 

Estou tentando listar o total de artigos por mês com count().

Ao clicar, vai listar todos artigos criados no mes referente.

Agora está assim ,sem a contagem:

Janeiro de 2011

Fevereiro de 2011

Março de 2011

 

 

 


<?php  
mysql_query( 'SET lc_time_names = "pt_BR"');
$sql2 = ("SELECT DISTINCT MONTH( data ) AS mes, DATE_FORMAT( data , '%M de %Y' ) AS nova_data FROM noticias ORDER BY data DESC");
$resultado2 = mysql_query($sql2) or die ("Não foi possível realizar a consulta");
if (@mysql_num_rows($resultado2) == 0) die('Nenhum registro encontrado');

while ($linha2=mysql_fetch_array($resultado2)){
echo"<li><img src=\"images/breadcrumb-seta.gif\" width=\"9\" height=\"7\"> <a href=\"noticias-listar.php?mes={$linha2['mes']}\" title=\"{$linha2['nova_data']}\"><strong>{$linha2[ 'nova_data' ]}</strong></a> (CONTAGEM)</li>";
 } 

?>  

 

 

Aqui eu consegui aplicar o COUNT() no histórico de aritgos sendo recuperado na URL (mes=id).

noticias-ler.php?id=149&mes=2

 

imprime: fevereiro 2011(2)

 

Quero que o resultado fique assim:

Janeiro de 2011 (2)

Fevereiro de 2011 (5)

Março de 2011 (17)

 

Qual o caminho, por favor?

 



<?php
mysql_query( 'SET lc_time_names = "pt_BR"');
$query ="SELECT *,  DATE_FORMAT( data , '%M de %Y') AS new_date, COUNT(id) FROM noticias WHERE habilita ='1' AND MONTH(data) = '".$_GET['mes']."'";
$result = mysql_query($query) or die(mysql_error());

while($row = mysql_fetch_array($result)){
$contagemDeArtigo = $row['COUNT(id)'];	
$contagemDeArtigo2 = "{$row[ 'new_date' ]} "." ($contagemDeArtigo)";	
   echo $contagemDeArtigo2;
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado.

Nesse caso como estou trabalhando com o $_GET só lista o mês referente na url: " noticias-ler.php?id=147&mes=6 " ao fazer a consulta ele vai imprimir "junho de 2011 ( 2 )".

O grande lance é separar para que liste todos os meses. Eu não tenho que fazer o COUNT() separado?

 


<?php
mysql_query( 'SET lc_time_names = "pt_BR"');
$query ="SELECT DISTINCT MONTH( data ) AS mes, CONCAT(DATE_FORMAT( data , '%M de %Y' ) , ' ( ', COUNT( id ), ' )' ) AS nova_data FROM noticias WHERE habilita ='1' AND MONTH(data) = '".$_GET['mes']."'";
$result2 = mysql_query($query) or die(mysql_error());
if (@mysql_num_rows($result2) == 0) die('Nenhum registro encontrado');


while ($linha2=mysql_fetch_array($result2)){	
echo"<li><img src=\"images/breadcrumb-seta.gif\" width=\"9\" height=\"7\"> <a href=\"noticias-listar.php?mes={$linha2['mes']}\" title=\"{$linha2['nova_data']}\"><strong>{$linha2[ 'nova_data' ]}</strong></a> </li>";

}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se entendi bem, é só você retirar a condição

 

AND MONTH(data) = '".$_GET['mes']."'

 

que irá listar todos os meses

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.