sql >> データベース >  >> RDS >> Mysql

phpとmysqlを使用してアーカイブを年と月でグループ化

    それはどうですか?

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

    このソリューションはPHPの方法で実行しますが、次のようなSQLクエリでも結果を取得できるはずです。

    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
    

    すべき 年と月で関連付けられたすべての投稿を、コンマで区切って1行(テストされていません)で返します。 WITH SEPARATORを使用します 別の区切り文字を指定するオプション(ドキュメントを確認してください)。

    ドキュメント:




    1. MicrosoftT-SQLからOracleSQLへの変換

    2. サンプルDWデータベースAdventureWorksDW2019の復元

    3. 外部キーとしての複合主キーからの1つのキーのみ

    4. replicate-rewrite-dbには実際のアプリケーションがありますか?