Votre problème est dans la requête :
$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 plupart des bases de données autres que MySQL rejetteraient cette requête, car vous regroupez sur 2 champs tout en sélectionnant de nombreux champs.
Le group by year, month
n'affichera qu'une seule ligne (aléatoire) d'un mois et masquera toutes les autres.
La solution est de supprimer le group by
clause entièrement et réécrivez la requête comme suit :
$sql = "SELECT *,YEAR(FROM_UNIXTIME(timestamp)) AS YEAR,
MONTH(FROM_UNIXTIME(timestamp)) AS MONTH
FROM ".NEWS_ARTICLES." ORDER BY YEAR DESC, MONTH ASC";
Remarque
C'est étrange que vous n'ayez pas de WHERE
clause. Voulez-vous vraiment sélectionner tous articles à chaque fois ?
Une meilleure approche serait de limiter le nombre d'articles sélectionnés dans la requête par un filtre.
Il est toujours plus rapide de filtrer dans la base de données plutôt qu'en php.