Vấn đề của bạn là ở truy vấn:
$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 ";
Hầu hết các cơ sở dữ liệu khác với MySQL sẽ từ chối truy vấn này, vì bạn đang nhóm trên 2 trường trong khi chọn nhiều trường.
Nhóm group by year, month
sẽ chỉ hiển thị một hàng (ngẫu nhiên) từ một tháng và ẩn tất cả các hàng khác.
Giải pháp là bỏ nhóm group by
mệnh đề hoàn toàn và viết lại truy vấn như sau:
$sql = "SELECT *,YEAR(FROM_UNIXTIME(timestamp)) AS YEAR,
MONTH(FROM_UNIXTIME(timestamp)) AS MONTH
FROM ".NEWS_ARTICLES." ORDER BY YEAR DESC, MONTH ASC";
Nhận xét
Thật kỳ lạ khi bạn không có WHERE
mệnh đề. Bạn có thực sự muốn chọn tất cả bài báo mọi lúc?
Một cách tiếp cận tốt hơn sẽ là giới hạn số lượng bài báo được chọn trong truy vấn bằng một số bộ lọc.
Lọc trong cơ sở dữ liệu luôn nhanh hơn là trong php.