Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Gruppieren des Archivs nach Jahr und Monat mit PHP und MySQL

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: