Il tuo problema è nella query:
$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 ";
La maggior parte dei database diversi da MySQL rifiuterebbe questa query, perché stai raggruppando su 2 campi mentre selezioni molti campi.
Il group by year, month
visualizzerà solo una singola riga (casuale) di un mese e nasconderà tutte le altre.
La soluzione è eliminare il group by
clausola interamente e riscrivi la query in questo modo:
$sql = "SELECT *,YEAR(FROM_UNIXTIME(timestamp)) AS YEAR,
MONTH(FROM_UNIXTIME(timestamp)) AS MONTH
FROM ".NEWS_ARTICLES." ORDER BY YEAR DESC, MONTH ASC";
Osservazione
È strano che tu non abbia un WHERE
clausola. Vuoi davvero selezionare tutti articoli ogni volta?
Un approccio migliore sarebbe limitare il numero di articoli selezionati nella query da un filtro.
È sempre più veloce filtrare nel database piuttosto che in php.