Bạn không thể sử dụng GROUP BY nếu bạn cũng muốn tên của các bài báo riêng lẻ. Chỉ cần tìm nạp toàn bộ danh sách và sau đó nhóm thành một mảng theo năm và tháng.
$sql = "SELECT timestamp, your_id_column, your_title_column FROM `NEWS` ORDER BY timestamp DESC";
$newsdata = DataAccess::ArrayFetch($sql);
$nav = array();
foreach ( $newsdata as $news ) {
$year = date('Y', $news['timestamp']);
$month = date('F', $news['timestamp']);
$nav[$year][$month][$news['your_id_column']] = $news['your_title_column'];
}
Khi bạn lặp lại mảng kết quả, bạn có thể đếm các mục tin tức cho mỗi năm / tháng để tạo ra tổng số.
<ul>
<?php
foreach ( $nav as $k => $v ) {
?>
<li><?php echo $k ?>
<ul>
<?php
foreach ( $v as $k2 => $v2 ) {
?>
<li><?php echo $k2.' ('.sizeof($v2).')' ?>
<ul>
<?php
foreach ( $v2 as $k3 => $v3 ) {
?>
<li><?php echo $v3 ?></li>
<?php
}
?>
</ul>
</li>
<?php
}
?>
</ul>
</li>
<?php
}
?>
</ul>