No puede usar GROUP BY si también desea los nombres de los artículos individuales. Simplemente obtenga la lista completa y luego agrúpela en una matriz por año y mes.
$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'];
}
Cuando itera la matriz resultante, puede contar las noticias de cada año/mes para generar el total.
<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>