Mysql
 sql >> Base de données >  >> RDS >> Mysql

regrouper les archives par année et par mois en utilisant php et mysql

Et ça ?

$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>';

Cette solution le fait à la manière PHP, mais vous devriez également pouvoir obtenir le résultat avec une requête SQL, avec quelque chose comme :

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

qui devrait renvoie tous les articles liés par année et par mois sur une seule ligne (non testés), séparés par des virgules. Utilisez le WITH SEPARATOR option pour spécifier un séparateur différent (vérifier la doc).

Documents :