Wie wäre es damit?
$data = array();
while($row = $stmt->fetch()){
$monthName = date("F", mktime(0, 0, 0, $row['Month'], 10));
$data[$row['Year']][$monthName][] = array(
'post' => $row['postTitle'],
'slug' => 'a-'.$row['Month'].'-'.$row['Year']
);
}
echo '<ul>';
foreach ($data as $year => $yearData){
echo "<li>$year<br/>";
echo '<ul>';
foreach ($yearData as $month => $monthData){
echo "<li>$month<br/>";
echo '<ul>';
foreach ($monthData as $number => $postData){
echo "<li><a href='${postData['slug']}'>Post $number</a><br/>";
echo "<a href='#'>${postData['post']}</a></li>";
}
echo '</ul></li>';
}
echo '</ul></li>';
}
echo '</ul>';
Diese Lösung macht es auf die PHP-Weise, aber Sie sollten das Ergebnis auch mit einer SQL-Abfrage erhalten können, mit etwas wie:
SELECT
Year(postDate) as Year, Month(postDate) as Month,
GROUP_CONCAT(postTitle) as posts
FROM
blog_posts_seo
GROUP BY Year, Month
ORDER BY postDate DESC
was sollte gibt alle nach Jahr und Monat zusammenhängenden Beiträge in einer einzigen Zeile zurück (nicht getestet), getrennt durch Kommas. Verwenden Sie den WITH SEPARATOR
Option, um ein anderes Trennzeichen anzugeben (überprüfen Sie das Dokument).
Dokumentation: