あなたの問題はクエリにあります:
$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つのフィールドでグループ化しているため、このクエリを拒否します。
group by year, month
1か月の1つの(ランダムな)行のみを表示し、他のすべての行を非表示にします。
解決策は、group by
を削除することです 句を完全に記述し、クエリを次のように書き直します:
$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よりもデータベースでフィルター処理する方が常に高速です。