Ir para conteúdo

POWERED BY:

Arquivado

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

LAG

Select para agrupar por ano e mes um campo data de mysql

Recommended Posts

Olá galera do Imasters.

Estou tentado fazer um menu tipo blog onde busco o ano e dentro desse ano, os meses.

Até ai tudo bem o script mostra os resultados porem repete os anos para cada mês.

Exemplo do resultado.

2014
10
2014
7
2013
10
2012
8
2012
6

Eu uso esse select para conseguir os dados;

$bbb = DB::getConn()->prepare("SELECT YEAR(data) as ano, MONTH(data) as mes FROM post GROUP BY ano,mes ORDER BY data DESC");
$bbb->execute();
while ($dados = $bbb->fetch(PDO::FETCH_ASSOC)){
 

Se alguém puder me ajudar ou dar uma luz.
att,

Compartilhar este post


Link para o post
Compartilhar em outros sites

A maneira mais simples eu creio ser utilizando um bloco condicional em PHP e nao direto no SQL.

 

algo como:

$anoAnterior = 0;

while ($dados....

if ($dados ['ano'] != $anoAnterior){

echo ($dados ['ano']);

echo($dados ['mes']);

}else {

echo ($dados ['mes']);

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

A maneira mais simples eu creio ser utilizando um bloco condicional em PHP e nao direto no SQL.

 

algo como:

$anoAnterior = 0;

while ($dados....

if ($dados ['ano'] != $anoAnterior){

echo ($dados ['ano']);

echo($dados ['mes']);

}else {

echo ($dados ['mes']);

}

Eu nem havia pensado nisso.

Vou tentar fazer isso, depois retorno.

Compartilhar este post


Link para o post
Compartilhar em outros sites

FgR, apresentou o mesmo resultado.

O código ficou assim:

 

 

try{
$bbb = DB::getConn()->prepare("SELECT * FROM post ORDER BY data DESC");
$bbb->execute();


$anoAnterior = 0;
while ($dados = $bbb->fetch(PDO::FETCH_ASSOC)){
if (FormataData1($dados['data']) != $anoAnterior){
echo (FormataData1($dados['data']))."<br>";
echo(FormataData2($dados['data']))."<br>";
}else {
echo (FormataData2($dados['data']))."<br>";
}  
?>
<? }?>
Resultado:
2014
10
2014
07
2013
10
2012
08
2012
06

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ah sim, faltou dizer que o ano atual é igual ao ano anterior...

 

Depois de:

if (FormataData1($dados['data']) != $anoAnterior){

 

Insira:

$anoAnterior = $dados['data']);


A condição passa a ficar assim:

if (FormataData1($dados['data']) != $anoAnterior){

$anoAnterior = $dados['data'];
echo (FormataData1($dados['data']))."<br>";
echo(FormataData2($dados['data']))."<br>";
}else {
echo (FormataData2($dados['data']))."<br>";
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza ficou ótimo. Fiz uma pequena adptação.

 

 

2014
10 (1)
7 (1)
2013
10 (1)
2012
8 (1)
6 (1)
o Código para o pessoal se precisar:
include 'conexoes.php';


$query=mysql_query("SELECT data, DATE_FORMAT(data,'%Y') as ano FROM post GROUP BY YEAR(data) ORDER BY ano DESC");


$anos_meses="";
while ($row_anos = mysql_fetch_assoc($query)) {
    $ano = $row_anos["ano"];
    $anos_meses=$ano;
?>
   <br><a href="pagina/ano/<?=$anos_meses?>"><?=$anos_meses?></a><br>
    <?
    $sql1 = mysql_query("SELECT DISTINCT MONTH(data) AS mes, COUNT(*) AS contagem, id FROM post WHERE YEAR(data) = '$ano' GROUP BY mes ORDER BY mes DESC");
    while ( ($row1 = mysql_fetch_array($sql1))) {
?>
  <a href="pagina/mes/<?=$row1['mes']?>.html"><?=$row1['mes']?></a> (<?=$row1['contagem']?>)<br>
<?
   }
}
?>
Os links, são links amigáveis, fica a critério de cada um. Se alguém quiser alguma ajuda é só pedir.

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.