Вашият проблем е в заявката:
$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 ";
Повечето бази данни, различни от MySQL, биха отхвърлили тази заявка, защото групирате в 2 полета, докато избирате много полета.
Групата по година, месец ще покаже само един (произволен) ред от месец и ще скрие всички останали.
Решението е да премахнете групата по
клауза изцяло и пренапишете заявката така:
$sql = "SELECT *,YEAR(FROM_UNIXTIME(timestamp)) AS YEAR,
MONTH(FROM_UNIXTIME(timestamp)) AS MONTH
FROM ".NEWS_ARTICLES." ORDER BY YEAR DESC, MONTH ASC";
Забележка
Странно е, че нямате WHERE
клауза. Наистина ли искате да изберете всички статии всеки път?
По-добър подход би бил да се ограничи броят на избраните в заявката статии чрез някакъв филтър.
Винаги е по-бързо да се филтрира в базата данни, отколкото в php.