sql >> Database >  >> RDS >> Mysql

archief groeperen op jaar en maand met behulp van php en mysql

Hoe zit dat?

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

Deze oplossing doet het op de PHP-manier, maar je zou het resultaat ook moeten kunnen krijgen met een SQL-query, met zoiets als:

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

die moeten retourneer alle berichten met betrekking tot jaar en maand in een enkele rij (niet getest), gescheiden door komma's. Gebruik de WITH SEPARATOR optie om een ​​ander scheidingsteken op te geven (bekijk het document).

Documentatie:




  1. Lees en importeer XLSX-bestand (Excel) in Oracle

  2. Hoe kan ik volledige resultatensets samenvoegen in MySQL?

  3. Datums tussen twee datums genereren

  4. ORACLE SQL*Plus-zelfstudie