Seu problema está na consulta:
$sql = "SELECT *,YEAR(FROM_UNIXTIME(timestamp)) AS YEAR,
MONTH(FROM_UNIXTIME(timestamp)) AS MONTH
FROM ".NEWS_ARTICLES." GROUP BY YEAR, MONTH ORDER BY YEAR DESC, MONTH ";
A maioria dos bancos de dados, exceto MySQL, rejeitaria esta consulta, porque você está agrupando em 2 campos enquanto seleciona muitos campos.
O
group by year, month
exibirá apenas uma única linha (aleatória) de um mês e ocultará todas as outras. A solução é eliminar o
group by
cláusula inteiramente e reescreva a consulta assim:$sql = "SELECT *,YEAR(FROM_UNIXTIME(timestamp)) AS YEAR,
MONTH(FROM_UNIXTIME(timestamp)) AS MONTH
FROM ".NEWS_ARTICLES." ORDER BY YEAR DESC, MONTH ASC";
Observação
É estranho que você não tenha um
WHERE
cláusula. Você realmente deseja selecionar todos artigos sempre?Uma abordagem melhor seria limitar o número de artigos selecionados na consulta por algum filtro.
É sempre mais rápido filtrar no banco de dados do que no php.