Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia,
estou com dificuldades para exibir os eventos separados pelo ano. Exemplo:
2013 2012
evento 01 evento 01
evento 02 evento 02
evento 03 evento 03
Vejam que exibe o ano e abaixo vem os eventos pertinentes àquele ano.
Tentei com este code, mas parece não estar rodando os anos, tá exibindo somente os eventos do ano de 2013:
<?php
$query2 = "SELECT * FROM posts ORDER BY data_ordenacao DESC";
$result2 = @mysql_query($query2);
if ($ver2 = mysql_fetch_assoc($result2)) {
echo '<b>'.$ano = substr($ver2['data_publicacao'], 0, 4).'</b><br>';
}
while ($registro = mysql_fetch_assoc($result2)) {
$id = $registro['id'];
$nome = $registro['nome'];
if($ano != $registro['data_publicacao']){
echo "<br />";
}
echo $nome.'<br>';
}
?>
Se alguém tiver uma idéia...
Grato.
o GROUP BY vai agrupar por datas iguais e não por ano.
se não me engano é assim:
SELECT * FROM TABELA GROUP BY YEAR('2012-02-23')
Eu coloquei uma data como string só para exemplificar, mas se você colocar o nome do seu campo no lugar acho que rola.
YEAR(data)
Não deu certo.
O meu banco não tem o campo 'ano', tem o campo data no formato date, daí eu pego o ano pelos primeiros quatro caracteres.
pensei nisso aqui, mas o ano é impresso várias vezes e nao fica alinhando em coluna, como era o pretendido.
$query2 = "SELECT * FROM posts ORDER BY data_ordenacao DESC, hora_ordenacao DESC";
$result2 = @mysql_query($query2);
while ($ver2 = mysql_fetch_assoc($result2)) {
echo '<b>'.$ano = substr($ver2['data_publicacao'], 0, 4).'</b><br>';
echo $ver2['nome'].'<br>';
}
Alguém tem uma idéia?
Grato.
mas que campo ano?
YEAR é uma função que vai pegar só o ano da sua data
YEAR('2015-02-23') me retorna 2015
Beleza, Vinicius
isso mesmo que está retornando: o ano dos eventos em sequência, mas tá repetindo e não to conseguindo separar por ano com o order by. Você tem algum exemplo para ver se consigo adaptar?
Grato.
tenta fazer o select igual eu falei... é o que você precisa
Imprime somente o ultimo registro, estranho!!!
$query = "SELECT * FROM posts GROUP BY YEAR('data_publicacao')";
$result = @mysql_query($query);
while ($ver = mysql_fetch_assoc($result)) {
echo substr($ver['data_publicacao'], 0, 4);
echo $ver['nome'];
}
Não deveria imprimir todos os registros com os seus respectivos anos na frente?
SELECT * FROM posts GROUP BY YEAR(data_publicacao)
e oq?
Desculpa, nao entendi?
A partir do codigo nao era para imprimir todos os registros com os seus respectivos anos na frente? Estou errado?
Exibiu somente o ultimo registro.
Entendeu?
é que não precisa das aspas.
o código é para agrupar por ano.
agora fiquei confuso
sem as aspas está exibindo assim:
2012 - Titulo 01
2013 - Titulo 0001
sendo que há mais registros para 2012 e 2013 e nao estao sendo exibidos.
Eu precisava que fosse assim:
2013 2012
evento 01 evento 01
evento 02 evento 02
evento 03 evento 03
por que um simples order by data não serve?
Porque desta forma que voce disse exibiria os anos varias vezes e eu precisava que imprimisse o ano e na sequencia os eventos daquele ano e depois imprime o outro ano e os seus respectivos eventos e assim vai...
aaaaaaaaaaaaaaaaaaa
isso ai é no PHP.
você criar um array e passar o ano como indice desse array e dentro desse array varios outros arrays que serão os seus itens.
já fez algo parecido para eu ter uma ideia de como funcionaria?
$array = array();
foreach($dadosDoMeuSelect as $dados){
$data = explode('-', $dados['data']);
$array[$dados[$data[0]]] = array('id'=> $dados['id'], 'outroDado' => $dados['outroDado']);
}
Felipe,
Qual sua tabela de eventos e qual sua tabela em que slava as datas? tudo na mesma tabela?
Usa o group by na sua query e ja traz pro php o resultado pronto. Ai com um fetch_array voce pega todos os dados.
http://www.devmedia.com.br/exemplos-com-group-by-e-com-a-clausula-having-totalizando-dados-sql-server-2008-parte-2/19839